如何解决以下CNN架构的错误"mat1 and mat2 shapes cannot be multiplied"?
How to resolve the error "mat1 and mat2 shapes cannot be multiplied" for the following CNN architecture?
我正在尝试使用批量归一化实现 Conv1d
模型,但出现错误:
RuntimeError Traceback (most recent call last)
<ipython-input-117-ef6e122ea50c> in <module>()
----> 1 test()
2 for epoch in range(1, n_epochs + 1):
3 train(epoch)
4 test()
7 frames
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in linear(input, weight, bias)
1751 if has_torch_function_variadic(input, weight):
1752 return handle_torch_function(linear, (input, weight), input, weight, bias=bias)
-> 1753 return torch._C._nn.linear(input, weight, bias)
1754
1755
RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x140 and 100x10)
我使用的批量大小为 32,数据的特征数量为 40。我一直在尝试计算 32 x 140
来自哪里,但我无法做到这一点.这是我尝试使用的 CNN 的架构:
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
#self.flatten=nn.Flatten()
self.net_stack=nn.Sequential(
nn.Conv1d(in_channels=1, out_channels=25, kernel_size=5, stride=2), #applying batch norm
nn.ReLU(),
nn.BatchNorm1d(25, affine=True),
nn.Conv1d(in_channels=25, out_channels=20, kernel_size=5, stride=2), #applying batch norm
nn.ReLU(),
nn.BatchNorm1d(20, affine=True),
nn.Flatten()
nn.Linear(20*5, 10),
nn.Softmax(dim=1))
def forward(self,x):
# result=self.net_stack(x[None])
result=self.net_stack(x[:, None, :])
return result
这个完全连接的应该从:
nn.Linear(20*5, 10)
至:
nn.Linear(20*7, 10)
为什么?
如果你的输入数据长度是40,那么(B
是batch size):
- 第一次转换 (K=25) 后的输出:
B x 25 x 18
- 第二次转换 (K=20) 后的输出:
B x 20 x 7
nn.Flatten()
后的输出:B x 140
,即如果B=32,则32x140
我正在尝试使用批量归一化实现 Conv1d
模型,但出现错误:
RuntimeError Traceback (most recent call last)
<ipython-input-117-ef6e122ea50c> in <module>()
----> 1 test()
2 for epoch in range(1, n_epochs + 1):
3 train(epoch)
4 test()
7 frames
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in linear(input, weight, bias)
1751 if has_torch_function_variadic(input, weight):
1752 return handle_torch_function(linear, (input, weight), input, weight, bias=bias)
-> 1753 return torch._C._nn.linear(input, weight, bias)
1754
1755
RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x140 and 100x10)
我使用的批量大小为 32,数据的特征数量为 40。我一直在尝试计算 32 x 140
来自哪里,但我无法做到这一点.这是我尝试使用的 CNN 的架构:
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
#self.flatten=nn.Flatten()
self.net_stack=nn.Sequential(
nn.Conv1d(in_channels=1, out_channels=25, kernel_size=5, stride=2), #applying batch norm
nn.ReLU(),
nn.BatchNorm1d(25, affine=True),
nn.Conv1d(in_channels=25, out_channels=20, kernel_size=5, stride=2), #applying batch norm
nn.ReLU(),
nn.BatchNorm1d(20, affine=True),
nn.Flatten()
nn.Linear(20*5, 10),
nn.Softmax(dim=1))
def forward(self,x):
# result=self.net_stack(x[None])
result=self.net_stack(x[:, None, :])
return result
这个完全连接的应该从:
nn.Linear(20*5, 10)
至:
nn.Linear(20*7, 10)
为什么?
如果你的输入数据长度是40,那么(B
是batch size):
- 第一次转换 (K=25) 后的输出:
B x 25 x 18
- 第二次转换 (K=20) 后的输出:
B x 20 x 7
nn.Flatten()
后的输出:B x 140
,即如果B=32,则32x140