我对深度学习非常陌生。我正在研究CIFAR10数据集,并创建了一个CNN模型,如下所示。
class Net2(nn.Module):
def __init__(self):
super(Net2, self).__init__()
self.conv1 = nn.Conv2d(3, 32, 5, 1)
self.fc1 = nn.Linear(32 * 5 * 5, 512)
self.fc2 = nn.Linear(512,10)
def forward(self, x):
x = x.view(x.size(0), -1)
x = F.max_pool2d(F.relu(self.conv1(x)),(2,2))
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
net2 = Net2().to(device)我的任务要求是创建一个模型,其中包括:
卷积层有32个滤波器,内核大小为5x5,步幅为1。
最大池层的内核大小为2x2和默认步幅。
ReLU激活层
线性层,输出512。
ReLU激活层
输出为10的线性层。
我想是我写的。但我认为我走错了路。请帮助我编写正确的模型,以及在Conv2d和线性层中这些参数背后的原因。
我从代码中得到的错误如下:
RuntimeError: Expected 4-dimensional input for 4-dimensional weight [32, 3, 5, 5], but got 2-dimensional input of size [1024, 3072] instead请帮帮我!
发布于 2021-12-07 00:36:56
代码有两个问题:
输入的
X= x.view(x.size(0),-1)
卷积层需要一个四维输入维数(N,C,H,W),其中N是批次大小,C=3是通道数,(H,W)是图像的维数。通过使用上述语句,您将(1024,3,32,32)输入压平到(1024,3072).。
第一线性层中输入特征的
self.fc1 = nn.Linear(32 *5* 5,512)
对于(1024,3,32,32)输入的卷积层的输出尺寸将是(1024,32,28,28),并且在应用2x2最大池之后,它是(1024,32,14,14)。因此,线性层的输入特性应该是32x14x14=6272。
https://stackoverflow.com/questions/70252965
复制相似问题