我试图将输出从最后一个卷积层传递到FCC层,但我正在与维度作斗争。默认情况下,网络使用AdaptiveAvgPool2d(输出大小=(6,6))什么不允许我使用火炬。出于再现性目的,使用确定性算法(True)。这就是我得到的错误:
*mat1 dim 1 must match mat2 dim 0*
(10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace=True)
(12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(avgpool): AdaptiveAvgPool2d(output_size=(6, 6))
(classifier): Sequential(
(0): Dropout(p=0.5, inplace=False)
(1): Linear(in_features=9216, out_features=4096, bias=True)
输入张量为:[10,3350350]。 最后一个Conv2d/MaxPool2d层的张量形状为:torch.Size([10,256,9,9])。我假设FCC的输入数量应该是256 x 9 x 9=20736,但它不起作用
下面是我的类,用于将输出从CONV转发到FCC层:
class Identity(nn.Module):
def __init__(self):
super(Identity, self).__init__()
def forward(self, x):
print('SHAPE', np.shape(x))
return x
这个想法取自视频:https://www.youtube.com/watch?v=qaDe0qQZ5AQ&t=301s。 事先非常感谢你
TLDR;完全连接层中的神经元数量正常,但形状不正常。
CNN和分类器之间的^{} 层将输出形状为
(10, 256, 6, 6)
的张量。因为您已经用(6, 6)
的output_size
初始化了它。这就是说,第一个完全连接的层应该有256*6*6
神经元这与当前模型的设置相匹配,而不是建议的
20736
您的分类器输入形状应该被展平,这可以通过定义展平层^{} (或使用an inline alternative)来实现。首先在初始值设定项中定义图层:
然后
相关问题 更多 >
编程相关推荐