当我将输入数据传递给PyTorch中的Linear(全连接层)时,我遇到了这个错误:
matrices expected, got 4D, 2D tensors
我完全理解这个问题,因为输入数据的形状是(N,C,H,W)(来自卷积+最大池化层),其中:
- N:数据样本
- C:数据的通道数
- H,W:高度和宽度
尽管如此,我原本期望PyTorch能够自动“重塑”数据形式:
- [ N , D1,…Dn] –> [ N, D] 其中 D = D1*D2*….Dn
我尝试过重塑Variable.data,但据我了解,这种方法不被推荐,因为梯度会保留之前的形状,而且一般来说不应该改变Variable.data的形状。
我确信有一个简单的方法符合框架的要求,但我还没有找到。
有没有好的解决方案呢?
附注:全连接层的输入大小为C * H * W
回答:
在阅读了一些示例后,我找到了解决方案。以下是如何在不干扰前向/后向传递流程的情况下进行操作的方法:
(_, C, H, W) = x.data.size()x = x.view( -1 , C * H * W)