PyTorch线性图层输入尺寸不匹配

Dan*_*ñez 2 python machine-learning deep-learning pytorch

我在将输入数据传递到PyTorch中的线性(完全连接层)时收到此错误:

matrices expected, got 4D, 2D tensors
Run Code Online (Sandbox Code Playgroud)

我完全理解这个问题,因为输入数据的形状为(N,C,H,W)(来自卷积+ MaxPool层),其中:

  • N:数据样本
  • C:数据通道
  • H,W:高度和宽度

不过,我希望PyTorch能够对数据表单进行“重塑”:

  • [N,D1,... Dn]-> [N,D]其中D = D1 * D2 * .... Dn

我尝试重塑Variable.data,但我读到不建议使用此方法,因为渐变会保留以前的形状,并且通常不应该对Variable.data形状进行突变。

我很确定框架附带一个简单的解决方案,但是我没有找到它。

有一个好的解决方案吗?

PD:全连接层的输入大小为C * H * W

Dan*_*ñez 5

阅读一些示例后,我找到了解决方案。很简单:s,所以我一开始就觉得很愚蠢。

这是在不操前后方向通过流程的情况下的操作方法

(_, C, H, W) = x.data.size()
x = x.view( -1 , C * H * W)
Run Code Online (Sandbox Code Playgroud)


小智 5

一个更通用的解决方案(不管 x 有多少维度都有效)是取所有维度大小的乘积,但第一个维度(“批量大小”):

n_features = np.prod(x.size()[1:])
x = x.view(-1, n_features)
Run Code Online (Sandbox Code Playgroud)