mat1 和 mat2 形状不能相乘
mat1 and mat2 shapes cannot be multiplied
我是 AI 的新手,python,我正在尝试构建一个架构来训练一组图像。然后以过度拟合为目标。但到目前为止,我无法理解如何正确获取输入和输出。每当我尝试训练网络时,我总是看到错误:
mat1 and mat2 shapes cannot be multiplied (48x13456 and 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
所以第一个转换块将使您的输出大小为 124
然后你做 Maxpool 这将使它减半,即 62
第二个转换块将使您的输出大小为 58
那么你的最后一个 Maxpool 将成为 29...
所以最终的扁平化输出将是 29*29*16
其中 16 是输出通道
我是 AI 的新手,python,我正在尝试构建一个架构来训练一组图像。然后以过度拟合为目标。但到目前为止,我无法理解如何正确获取输入和输出。每当我尝试训练网络时,我总是看到错误:
mat1 and mat2 shapes cannot be multiplied (48x13456 and 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
所以第一个转换块将使您的输出大小为 124
然后你做 Maxpool 这将使它减半,即 62
第二个转换块将使您的输出大小为 58
那么你的最后一个 Maxpool 将成为 29...
所以最终的扁平化输出将是 29*29*16
其中 16 是输出通道