RuntimeError: mat1 and mat2 shapes cannot be multiplied (192x64 and 4x3)

原因分析:

RuntimeError: mat1 and mat2 shapes cannot be multiplied (192x64 and 4x3)_第1张图片

矩阵1和矩阵2大小不一样,不能够相乘,这是我们在使用nn.linear函数时参数唯独不匹配,出现的错误,我们回想一下全连接层的公式:

                                                      Y = W * X + B

在这里x是我们的原始数据即待输入数据,w是我们的线性层函数。若要让两个矩阵进行相乘,则W和X大小必须一样,我们看linear函数:RuntimeError: mat1 and mat2 shapes cannot be multiplied (192x64 and 4x3)_第2张图片

 全连接层:我们将数据x展平为2维(a,b)则w的维度应该为(b,c)即x的第二维和w的第一维相同。

RuntimeError: mat1 and mat2 shapes cannot be multiplied (192x64 and 4x3)_第3张图片

 X2_tensor展开为二维,维度为(192,64),X3_tensor展开为二维,维度为(192,64)分别与(64,3)矩阵相乘。所以linear第一个参数为x展开为二维时第二个维度,第二个参数是想把第二个维度升高或者降低的维度。

X2_tensor = torch.rand(1,3,64,64)
X3_tensor = torch.rand(3,64,64)

# 用来改变最后数组最后一维的维度
# 用来缩小或者扩展特征维度
emdeding = nn.Linear(64, 3)
Y2 = emdeding(X2_tensor) # (1,3,64,3)
Y3 = emdeding(X3_tensor) # (3,64,3)

经过线性层后的维度为:

torch.Size([1, 3, 64, 3])
torch.Size([3, 64, 3])

你可能感兴趣的:(pytorch踩坑,python,开发语言)