我正在学习如何使用Pytorch官方教程:https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html
一切顺利,直到我运行CIFAR10分类示例。(我根本没有修改代码)
错误消息:
Traceback (most recent call last):
File "/tmp/pycharm_project_331/main.py", line 90, in <module>
for i, data in enumerate(trainloader, 0):
File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 286, in __next__
return self._process_next_batch(batch)
File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 307, in _process_next_batch
raise batch.exc_type(batch.exc_msg)
TypeError: Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 57, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
File "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", line 57, in <listcomp>
samples = collate_fn([dataset[i] for i in batch_indices])
File "/usr/local/lib/python3.5/dist-packages/torchvision/datasets/cifar.py", line 121, in __getitem__
img = self.transform(img)
File "/usr/local/lib/python3.5/dist-packages/torchvision/transforms/transforms.py", line 49, in __call__
img = t(img)
File "/usr/local/lib/python3.5/dist-packages/torchvision/transforms/transforms.py", line 143, in __call__
return F.normalize(tensor, self.mean, self.std)
File "/usr/local/lib/python3.5/dist-packages/torchvision/transforms/functional.py", line 165, in normalize
raise TypeError('tensor is not a torch image.')
TypeError: tensor is not a torch image.
我想也许我会错过一些代码,但代码很好。所以我再次运行代码几次。错误信息以某种方式消失,培训进展顺利。
我找不到任何模式来复制错误。它只是在我更改代码时弹出,并在没有任何代码修改的情况下自行修复。
我将PyCharm配置为通过SSH(Ubuntu服务器)连接到远程解释器,但是当我使用本地解释器并通过python控制台运行代码时,也发生了同样的事情。
这是非常令人沮丧的,因为我不知道我的代码是错误还是发生了同样的事情。
你肯定修改了你的代码,这就是错误发生的原因。
问题在于ToTensor
从torchvision
转换,这个片段具体来说:
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
您需要将PIL
图像转换为torch.Tensor
对象以对其进行标准化。如果您删除transforms.ToTensor()
,则会出现上述错误。