Pytorch初学错误集锦(二)

别以为拆借东墙补借西墙就万事大吉了,大错特错。一个系统,往往是前后贯通,整体趋于和谐的,不是一处一地的完美就可以了。
身在局中,难以跳出局,以局外之身处理局内事情。望大家引以为鉴!
以下两处错误,均出现在一个.py文件中:

1.报错:RuntimeError: output with shape [1, 28, 28] doesn’t match the broadcast shape [3, 28, 28]

报错原因:图片格式问题,Mnist数据集图片只有一个channel。

解决办法1:将图片1通道改为3通道

# 将原语句
img_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])

# 修改为
img_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Lambda(lambda x: x.repeat(3,1,1)), # 修改位置,添加了此语句
    transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])

解决办法2:将.Normalize()修改成1通道

# 将原语句
img_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])

# 修改为
img_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,)) # 修改位置,改成1通道
])

2.报错:RuntimeError: size mismatch, m1:[128 x 2352] ,m2:[784 x 128] ,at …

描述:出现上一个错误之后,采用了解决方法1.接着运行,出现此错误。

报错原因:图片通道不匹配问题,即设计的通道和图片实际通道不相等。

解决办法:修改通道数

# 原语句报错位置
def forward(self, x):
        x = self.dis(x) 
        print(x.shape)
        return x
 # 报错位置,修改bug,并不一定是在报错位置。大多数情况下,报错位置是修改bug的首选之地。往往不少bug的修改却在和报错位置有联系的其他地方。

# 修改bug的位置是:采用上述解决方法2,即为debug。

你可能感兴趣的:(报错)