gpt4 book ai didi

python - mat1 和 mat2 形状不能相乘

转载 作者:行者123 更新时间:2023-12-03 08:27:05 25 4
gpt4 key购买 nike

我是人工智能和Python的新手,我正在尝试构建一个架构来训练一组图像。然后以过度拟合为目标。但到目前为止,我无法理解如何正确获取输入和输出。每当我尝试训练网络时,我总是看到错误:

mat1 和 mat2 形状不能相乘(48x13456 和 16x64)

我的网络:

net2 = nn.Sequential(

nn.Conv2d(3,8, kernel_size=5, padding=0),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2),


nn.Conv2d(8,16, kernel_size=5, padding=0),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2),

nn.Flatten(),
nn.Linear(16,64),
nn.ReLU(),
nn.Linear(64,10)
)

这是我正在执行的任务的一部分,我真的不明白为什么它没有运行。任何提示!

最佳答案

这是因为你已经将 2D cnn 扁平化为 1D FC 层......
并且您必须在展平层之前手动计算更改后的输入形状从 128 大小到 Maxpool 层...在您的情况下,其 29*29*16所以你的代码必须重写为

net2 = nn.Sequential(

nn.Conv2d(3,8, kernel_size=5, padding=0),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2),


nn.Conv2d(8,16, kernel_size=5, padding=0),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2),

nn.Flatten(),

nn.Linear(13456,64),
nn.ReLU(),
nn.Linear(64,10)
)

这应该有效

编辑:这是计算输出大小的简单公式:

  (((W - K + 2P)/S) + 1)
Here W = Input size
K = Filter size
S = Stride
P = Padding

因此第一个转换 block 将使您的输出大小为 124
然后你执行 Maxpool ,这将使它减半,即 62
第二个转换 block 将使您的输出大小为 58
那么你的最后一个 Maxpool 将会是 29...
因此最终的扁平化输出将是 29*29*16 其中 16 是输出 channel

关于python - mat1 和 mat2 形状不能相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66337378/

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