RuntimeError: size mismatch, m1: [4 x 3136], m2: [64 x 5] at c:\a\w\1\s\tmp_conda_3.7_1

RuntimeError: size mismatch, m1: [4 x 3136], m2: [64 x 5] at c:\a\w\1\s\tmp_conda_3.7_1

我使用了 python 3,当我插入 transform random crop size 224 时,它给出了 miss match 错误。

here my code

我做错了什么?

您的代码对 resnet: you changed the number of channels, the number of bottlenecks at each "level", and you removed a "level" entirely. As a result, the dimension of the feature map you have at the end of layer3 is not 64: you have a larger spatial dimension than you anticipated by the nn.AvgPool2d(8) 进行了修改。您得到的错误消息实际上告诉您 level3 的输出形状为 64x56x56 并且在使用内核和步幅 8 进行平均池化之后,您有 64x7x7=3136 维特征向量,而不是你期望的只有 64。

你能做什么?
与 "standard" resnet 相反,您从 conv1 中删除了步幅,并且在 conv1 之后没有最大池。此外,您删除了 layer4 ,这也有一个进步。因此,您可以在网络中添加池化以减少 layer3.
的空间维度 或者,您可以将 nn.AvgPool(8) 替换为 nn.AdaptiveAvgPool2d([1, 1]) 一个仅输出一个特征的平均池,而不管输入特征图的空间维度如何。