gpt4 book ai didi

pytorch - `*** RuntimeError: mat1 dim 1 must match mat2 dim 0` 每当我运行模型(图像)

转载 作者:行者123 更新时间:2023-12-03 23:02:16 26 4
gpt4 key购买 nike

    def __init__(self):
super().__init__()

self.conv = nn.Sequential(
nn.Conv2d(1, 64, kernel_size=5, stride=2, bias=False),
nn.BatchNorm2d(64),
nn.ReLU(),

nn.Conv2d(64, 64, kernel_size=3, stride=2, bias=False),
nn.BatchNorm2d(64),
nn.ReLU(),

nn.Conv2d(64, 64, kernel_size=3, stride=2, bias=False),
nn.BatchNorm2d(64),

)
我该如何处理这个错误?我认为错误出在 self.fc 上,但我不能说如何修复它。

最佳答案

self.conv(x) 的输出形状torch.Size([32, 64, 2, 2]) :32*64*2*2= 8192 (这相当于( self.conv_out_size )。全连接层的输入需要一个单维向量,即您需要在传递到前向函数中的全连接层之前将其展平。
IE。

class Network():
...
def foward():
...
conv_out = self.conv(x)
print(conv_out.shape)
conv_out = conv_out.view(-1, 32*64*2*2)
print(conv_out.shape)
x = self.fc(conv_out)
return x
输出
torch.Size([32, 64, 2, 2])
torch.Size([1, 8192])

编辑:
我认为您正在使用 self._get_conv_out功能不对。
它应该是
    def _get_conv_out(self, shape):
output = self.conv(torch.zeros(1, *shape)) # not (32, *size)
return int(numpy.prod(output.size()))
然后,在前传中,您可以使用
        conv_out = self.conv(x)
# flatten the output of conv layers
conv_out = conv_out.view(conv_out.size(0), -1)
x = self.fc(conv_out)
对于 (32, 1, 110, 110) 的输入,输出应该是 torch.Size([32, 2]) .

关于pytorch - `*** RuntimeError: mat1 dim 1 must match mat2 dim 0` 每当我运行模型(图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64868040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com