更改训练集中的所有图像

Change all images in training set

我有一个卷积神经网络。我想在训练集中的图像上训练它,但首先它们应该用我的函数 change(tensor, float) 包装,该函数采用 [hight,width,3] 形式的 tensor/image 和一个浮点数。 批量大小 =4

正在加载数据

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
                                          shuffle=True, num_workers=2)

CNN架构

for epoch in range(2):  # loop over the dataset multiple times

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        # get the inputs; data is a list of [inputs, labels]
        inputs, labels = data  
        #size of inputs [4,3,32,32] 
        #size of labels [4]

        inputs = change(inputs,0.1) <----------------------------

        # zero the parameter gradients
        optimizer.zero_grad()

        # forward + backward + optimize
        outputs = net(inputs) #[4, 10]
        
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # print statistics
        running_loss += loss.item()
        if i % 2000 == 1999:    # print every 2000 mini-batches
            print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')
            running_loss = 0.0

print('Finished Training')

我正在尝试应用图像功能更改,但它给出了对象错误。 有快速修复的方法吗?

我正在使用 Julia 函数,但它可以与其他对象一起正常工作。错误信息:

JULIA: MethodError: no method matching copy(::PyObject)
Closest candidates are:
  copy(!Matched::T) where T<:SHA.SHA3_CTX at /opt/julia-1.7.2/share/julia/stdlib/v1.7/SHA/src/types.jl:213
  copy(!Matched::T) where T<:SHA.SHA2_CTX at /opt/julia-1.7.2/share/julia/stdlib/v1.7/SHA/src/types.jl:212
  copy(!Matched::Number) at /opt/julia-1.7.2/share/julia/base/number.jl:113

我建议将 change 函数放到 transforms 列表中,这样您就可以在转换阶段进行数据更改。

partial 来自 functools 将帮助您修复参数数量,如下所示:

from functools import partial


def change(input, float):
    pass


# Use partial to fix number of params, such that change accepts only input
change_partial = partial(change, float=pass_float_value_here)

# Add change_partial to a list of transforms before or after converting to tensors
transforms = Compose([
    RandomResizedCrop(img_size),  # example
    # Add change_partial here if it operates on PIL Image
    change_partial,
    ToTensor(),  # convert to tensor       
    # Add change_partial here if it operates on torch tensors
    change_partial,
])