----------初识PYTORCH————(小白篇)
这是第一次接触pytorch,想把自己踩过的坑写出来希望能给大家帮助,同时也可以加深对它的理解。
这个报错表达的意思是:预期输入批次大小(5408)与目标批次大小(32)匹配错误。 即在你所构建的神经网络,层与层之间有输入与接受不匹配的缘故,比如:
self.conv1 = nn.Conv2d(3,6,kernel_size=5,stride=1,padding=0)#第一层卷积层
self.pool = nn.MaxPool2d(kernel_size=2,stride=2,padding=0)#池化层
self.conv2 = nn.Conv2d(6,32,kernel_size=5,stride=1,padding=0)#第二层卷积层
self.fc1 = nn.Linear(32*1*1,120)#第一层全连接层
self.fc2 = nn.Linear(120, 84)#第二层全连接层
self.fc3 = nn.Linear(84, 14)#第三层全连接层
上述代码的问题出在第二层卷积层与第一层全连接层之间,即第二层卷积层输出的批次大小为与第一层全连接的接受目标批次不匹配,所以我们应该调整第一层的全连接层的输入通道,其中,即调整下面代码的参数:
self.fc1 = nn.Linear(32*1*1,120)#第一层全连接层
上述nn.Linear有两个参数,分别为输入特征的大小和输出特征的大小; 而第一个参数32为通道数量,1*1为通道大小,对应上面的第二层卷积层 那么如何得到正确的参数呢? 我们完全可以看看从第二层卷积层输出的批次是什么样的:
· x = torch.randn(256,3,64,64)#(这里是输入的图片格式256张:3通道 64*64的图片,大家根据自己的输入来写)
x = self.pool(F.relu(self.conv1(x)))
out = self.pool(F.relu(self.conv2(x)))
print(out.shape)
最后显示【256,32,13,13】,所以将 nn.Linear(3211,120)中的第一个参数改为 nn.Linear(321313,120)即可。
|