#python #pycharm #pytorch
#python #pycharm #pytorch
Вопрос:
Я изучаю, как использовать 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.
Это так расстраивает, поскольку я понятия не имею, ошибочен ли мой код или происходит то же самое.
Ответ №1:
Вы определенно изменили свой код, и именно поэтому возникает ошибка.
Проблема заключается в 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()
, у вас останется вышеуказанная ошибка.
Комментарии:
1. Спасибо, что оставили комментарий здесь. Я абсолютно честен, что я не изменял свой код между ошибочным запуском и безошибочным запуском. Единственное, что я сделал, это нажать кнопку «Выполнить».
2. Я знаю, но эта ошибка возникает, если вы не преобразуете PIL-изображение в tensor. Прокомментируйте
ToTensor
, и вы увидите точно такую же ошибку.3. Вы правы! Однако я все еще не понимаю, почему повторный запуск того же кода может устранить ошибку.
4. Можете ли вы запустить код хотя бы один раз без
ToTensor()
? Происходит ли сбой при использовании этой функции? Я подозреваю, что вы случайно удалили эту строку, и именно так возникла эта ошибка.