报错:RuntimeError: mat1 and mat2 shapes cannot be multiplied (20x10368 and 180000x128)
可能是导致维度不匹配的原因。为了确保输入到全连接层的维度正确,、需要计算经过卷积层和池化层后的特征图尺寸。:假设输入图像的尺寸是 H \W(高度和宽度),例如 H = 300,W = 300。找到错误代码,是由于模型处计算错误。这段代码中的全连接层。错误表示:矩阵的维度不匹配,导致无法完成矩阵相乘操作。
·
错误表示:矩阵的维度不匹配,导致无法完成矩阵相乘操作。
找到错误代码,是由于模型处计算错误。这段代码中的全连接层 self.fc1 = nn.Linear(32 * 75 * 75, 128) 可能是导致维度不匹配的原因。为了确保输入到全连接层的维度正确,、需要计算经过卷积层和池化层后的特征图尺寸。
def __init__(self, num_classes):
super(ConvolutionalNeuralNetwork, self).__init__()
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1)
self.fc1 = nn.Linear(32 * 75 * 75, 128) # 根据图像维度调整输入大小
self.fc2 = nn.Linear(128, num_classes)
self.relu = nn.ReLU()
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
-
输入图像尺寸:假设输入图像的尺寸是 H \W(高度和宽度),例如 H = 300,W = 300。
-
卷积层和池化层的影响:
- 每次卷积层后,特征图的尺寸计算公式为: 新尺寸=(原尺寸−核大小+2×padding)/stride+1
- 对于
self.conv1和self.conv2,尺寸保持不变。 - 然后进行一次最大池化,尺寸减半。
-
计算特征图尺寸:
- 假设输入图像尺寸为 300 \ 300,经过两次卷积和一次池化后的尺寸为: 特征图尺寸=(300/2)×(300/2)=150×150
- 意味着在原始图像为300时,全连接层的特征图尺寸是75*75.但是在代码中原始图像输入是75*75,于是修改原始图像大小为300*300,问题解决!
-
IMG_SIZE = 300
更多推荐



所有评论(0)