PyTorch处理MNIST数据集触发AttributeError属性错误该如何解决
问题原因
torchvision 0.2.0及之后的版本对MNIST类的内部属性做了两处调整:
- 原
train_data/test_data属性被重命名为data,原train_labels/test_labels被重命名为targets,旧属性名仅作为只读别名保留 - 旧属性名被设置为
@property装饰的只读属性,直接对train_data赋值会触发属性不可修改的报错
解决方法
方案1:替换属性名(最快适配)
将修改数据集的代码里的train_data替换为官方公开的可修改属性data即可:
mnist_data.data = (mnist_data.data.type(torch.FloatTensor)/255).bernoulli()
方案2:通过Transform实现逻辑(更符合PyTorch规范)
不需要修改数据集内部属性,直接在初始化时的Transform序列里增加伯努利采样逻辑即可,transforms.ToTensor()已经默认完成了除以255的数值缩放:
mnist_data = datasets.MNIST('../data', train=True, download=True, transform=transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)), transforms.Lambda(lambda x: x.bernoulli()) ]))
内容的提问来源于stack exchange,提问作者dzdws
相关产品推荐
相关产品推荐

