Python Pytorch transforms.RandomRotation()在Google Colab上不起作用

Python Pytorch transforms.RandomRotation()在Google Colab上不起作用,python,machine-learning,pytorch,google-colaboratory,Python,Machine Learning,Pytorch,Google Colaboratory,正常情况下,我在电脑上进行字母和数字识别,我想把我的项目转移到Colab,但不幸的是出现了一个错误(你可以看到下面的错误)。 经过一些调试,我发现哪一行给了我错误 transforms.RandomRotation(degrees=(90, -90)) 下面,我编写了简单的抽象代码来显示此错误。此代码在colab上不起作用,但在我自己的计算机环境下可以正常工作。问题可能与pytorch库的不同版本有关。我的计算机上有版本1.3.1,colab使用版本1.4.0 import torch imp

正常情况下,我在电脑上进行字母和数字识别,我想把我的项目转移到Colab,但不幸的是出现了一个错误(你可以看到下面的错误)。 经过一些调试,我发现哪一行给了我错误

transforms.RandomRotation(degrees=(90, -90))
下面,我编写了简单的抽象代码来显示此错误。此代码在colab上不起作用,但在我自己的计算机环境下可以正常工作。问题可能与pytorch库的不同版本有关。我的计算机上有版本1.3.1,colab使用版本1.4.0

import torch
import torchvision
from torchvision import datasets, transforms
import matplotlib.pyplot as plt   
    transformOpt = transforms.Compose([
            transforms.RandomRotation(degrees=(90, -90)),
            transforms.ToTensor()
        ])

    train_set = datasets.MNIST(
        root='', train=True, transform=transformOpt, download=True)
    test_set = datasets.MNIST(
        root='', train=False, transform=transformOpt, download=True)


    train_loader = torch.utils.data.DataLoader(
        dataset=train_set,
        batch_size=100,
        shuffle=True)
    test_loader = torch.utils.data.DataLoader(
        dataset=test_set,
        batch_size=100,
        shuffle=False)

    images, labels = next(iter(train_loader))
    plt.imshow(images[0].view(28, 28), cmap="gray")
    plt.show()
我在GoogleColab上执行上面的示例代码时遇到的完整错误

TypeError回溯(最近一次调用)
在()
24随机播放=错误)
25
--->26图像,标签=下一个(iter(列车装载机))
27 plt.imshow(图像[0]。视图(28,28),cmap=“灰色”)
28 plt.show()
10帧
/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py in\uuuuuuuu next\uuuuuuu(self)
343
344定义下一个定义(自身):
-->345数据=self.\u next\u data()
346自身数量+=1
347如果self.\u dataset\u kind==\u DatasetKind.Iterable和\
/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py in_next_data(self)
383定义下一个定义数据(自身):
384 index=self._next_index()#可能会引发停止迭代
-->385 data=self._dataset_fetcher.fetch(index)#可能引发停止迭代
386如果自。\ U引脚\内存:
387数据=_utils.pin_内存。pin_内存(数据)
/usr/local/lib/python3.6/dist-packages/torch/utils/data//u utils/fetch.py在fetch中(self,可能是批处理索引)
42 def fetch(自身,可能是批处理索引):
43如果自我自动排序:
--->44 data=[self.dataset[idx]用于可能的批处理索引中的idx]
45其他:
46 data=self.dataset[可能是批处理索引]
/usr/local/lib/python3.6/dist-packages/torch/utils/data//u utils/fetch.py in(.0)
42 def fetch(自身,可能是批处理索引):
43如果自我自动排序:
--->44 data=[self.dataset[idx]用于可能的批处理索引中的idx]
45其他:
46 data=self.dataset[可能是批处理索引]
/usr/local/lib/python3.6/dist-packages/torchvision/datasets/mnist.py in_u__获取项目(self,index)
95
96如果self.transform不是None:
--->97 img=自转换(img)
98
99如果self.target_transform不是None:
/usr/local/lib/python3.6/dist-packages/torchvision/transforms/transforms.py in___调用(self,img)
68定义呼叫(自我,img):
69对于self.transforms中的t:
--->70 img=t(img)
71返回img
72
/usr/local/lib/python3.6/dist-packages/torchvision/transforms/transforms.py in__调用__(self,img)1001 angle=self.get_参数(self.degrees)1002
->1003返回F旋转(img、角度、自重采样、自扩展、自中心、自填充)1004 1005 def
__报告(自我):
/旋转中的usr/local/lib/python3.6/dist-packages/torchvision/transforms/functional.py(img、角度、重采样、展开、居中、填充)
727 fill=元组([fill]*3)
728
-->729返回图像旋转(角度、重采样、展开、居中、填充颜色=填充)
730
731
/usr/local/lib/python3.6/dist-packages/PIL/Image.py in rotate(自、角度、重采样、展开、居中、平移、填充颜色)2003 w,h=nw,nh 2004
->2005返回self.transform((w,h),仿射,矩阵,重采样,fillcolor=fillcolor)2006 2007定义保存(self,fp,format=None,**参数):
/usr/local/lib/python3.6/dist-packages/PIL/Image.py in transform(自身、大小、方法、数据、重采样、填充、填充颜色)2297提升值错误(“缺少方法数据”)2298
->2299 im=new(self.mode,size,fillcolor)2300如果方法==MESH:2301#四边形列表
/usr/local/lib/python3.6/dist-packages/PIL/Image.py新(模式、大小、颜色)2503 im.palete=imagepalete.imagepalete()2504 color=im.palete.getcolor(颜色)
->2505返回im._新(芯填充(模式、尺寸、颜色))2506 2507
TypeError:函数只接受1个参数(给定3个)

你完全正确。torchvision 0.5在
full
参数中的
RandomRotation()
中有一个错误,可能是由于枕头版本不兼容。这一问题现已得到修复(),将在下一版本中解决

暂时将
fill=(0,)
添加到
RandomRotation
变换中以修复它

transforms.RandomRotation(degrees=(90, -90), fill=(0,))

你能粘贴完整的错误跟踪吗?@kHarshit谢谢,我添加了完整的错误跟踪。顺便说一句,您可以将此示例代码粘贴到自己的colab中,并亲自查看错误。我发现错误来自我提到的那一行,但我不知道如何解决它。嗨,哈拉什,你使用的是哪个版本的PIL。。。我有'5.0.0',通过fill=(0,)并不能解决我的问题。。。Thanks@LuisCandanedo您现在可以升级到torchvision v0.6.0,或查看github发布页面。我不确定使用了什么版本的PIL。我只想说这个bug在2020年仍然是个问题,但至少你在这里列出的解决方法仍然有效。
transforms.RandomRotation(degrees=(90, -90), fill=(0,))