关于RuntimeError: output with shape [1, 28, 28] doesn't match the broadcast shape [3, 28, 28]

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

在跑Pytroch的MNIST手写识别例子时,碰到了这个错误,报错位置代码如下

transform = transforms.Compose([
	transforms.ToTensor(), 
	transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])])

分析报错应该是由于minist是灰度图像,只有一个通道,与归一化时的三通道不匹配,所以有三种解决方法

更改通道数


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))
 ])

更改归一化参数(一)

transform = transforms.Compose([
     transforms.ToTensor()
     transforms.Normalize(mean=[0.5], std=[0.5])
 ])

更改归一化参数(二)

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
    ])

这个方法借鉴的是Victor_Gui的这篇博文,0.13070.3081分别是均值和标准差,这两者需要根据不同的数据集进行计算改变

你可能感兴趣的:(人工智能)