错误表示:矩阵的维度不匹配,导致无法完成矩阵相乘操作。

找到错误代码,是由于模型处计算错误。这段代码中的全连接层 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.conv1self.conv2,尺寸保持不变。
    • 然后进行一次最大池化,尺寸减半。
  • 计算特征图尺寸

    • 假设输入图像尺寸为 300 \ 300,经过两次卷积和一次池化后的尺寸为: 特征图尺寸=(300/2)×(300/2)=150×150
  • 意味着在原始图像为300时,全连接层的特征图尺寸是75*75.但是在代码中原始图像输入是75*75,于是修改原始图像大小为300*300,问题解决!
  • IMG_SIZE = 300

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐