Neural network MNIST数据集上的Pytorch变换

Neural network MNIST数据集上的Pytorch变换,neural-network,pytorch,dataloader,Neural Network,Pytorch,Dataloader,我目前有一个监管薄弱的项目,我需要在数据集前面加一个屏蔽。我现在的问题是我不知道怎么做。让我用一些代码和图片进一步解释 我使用的是MNIST数据集,我必须以某种方式进行编辑。正如你所看到的,一个中间的正方形被剪掉了。下面的代码用于使用for循环编辑MNIST for i in range(int(image_size/2-5),int(image_size/2+3)): for j in range(int(image_size/2-5),int(image_size/2+3)):

我目前有一个监管薄弱的项目,我需要在数据集前面加一个屏蔽。我现在的问题是我不知道怎么做。让我用一些代码和图片进一步解释

我使用的是MNIST数据集,我必须以某种方式进行编辑。正如你所看到的,一个中间的正方形被剪掉了。下面的代码用于使用for循环编辑MNIST

for i in range(int(image_size/2-5),int(image_size/2+3)):
   for j in range(int(image_size/2-5),int(image_size/2+3)):
      image[i][j] = 0
但是,我目前还不确定在dataloader转换中应该如何使用它。dataloader和transform的代码如下所示:

transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()])

train_dataset = torchvision.datasets.MNIST(
    root="~/torch_datasets", train=True, transform=transform, download=True
)

test_dataset = torchvision.datasets.MNIST(
    root="~/torch_datasets", train=False, transform=transform, download=True
)

train_loader = torch.utils.data.DataLoader(
    train_dataset, batch_size=128, shuffle=True, num_workers=4, pin_memory=True
)

test_loader = torch.utils.data.DataLoader(
    test_dataset, batch_size=32, shuffle=False, num_workers=4
)

def imshow(img):
    #img = img / 2 + 0.5     # unnormalize
    npimg = img.numpy()
    plt.imshow(np.transpose(npimg, (1, 2, 0)))

dataiter = iter(train_loader)
images, labels = dataiter.next()
imshow(torchvision.utils.make_grid(images))

那么,有没有一种简单的方法可以将转换应用到torchvision.transforms.Compose中的完整数据集?

您可以定义任何自定义转换,并将其作为函数在转换管道中使用

def erase_middleimage:torch.Tensor->torch.Tensor: 对于范围为“亲密度大小/2-5”的i,亲密度大小/2+3: 对于尺寸范围为2-5的j,尺寸范围为2+3: 图像[:,i,j]=0 返回图像 transform=torchvision.transforms.Compose [ 首先把它转换成张量 torchvision.transforms.ToTensor, 然后擦去中间的部分 torchvision.transforms.Lambdaerase_middle, ] erase_middle可以变得更通用,这样它适用于大小不同且不一定是正方形的图像

def erase_middleimage:torch.Tensor->torch.Tensor: _,高度,宽度=image.size x_开始=宽度//2-5 x_端=宽度//2+3 y_起点=高度//2-5 y_端=高度//2+3 使用切片可以实现与for循环相同的效果 图像[:,y_开始:y_结束,x_开始:x_结束]=0 返回图像
你试过检查torchvision.transforms.Random擦除吗?看起来像你要找的。参考:嘿,我不一定要随机擦除。我希望每次都在同一个位置进行擦除。