Pytorch中二维矩阵到向量的线性投影



我的问题是我想应用线性投影,然后是批处理归一化和ReLU,但我不知道pytorch足够好来应用它。

我的输入数据是1024个数据点的特征,尺寸为10x10,所以(16,1024,10,10),而16是批大小。我想把这个10x10的特征矩阵投影到一个长度为32的向量上,所以我的输出是(16,1024,32)。如何解决这个问题?我发现这个问题看起来像我需要的,但我得到一个错误说4维输入在bmm中不支持。

torch.bmm只支持3D输入。如果该功能扩展到进一步的广播维度,那将是很好的,但目前情况并非如此。由于最终要降低维数,因此可以在所讨论的矩阵的3D视图上执行矩阵乘法。我把矢量化矩阵称为F

# get 3D tensor view input
input_3D = input.view(input.shape[0],input.shape[1],-1)
# vectorizing matrix should be of size [input_3D.shape[-1], <desired output size>]
# in this case, F is of size [100,16]
# since torch.bmm expects F to be of 3 dimensions, we need to expand it
F = F.unsqueeze(0).expand(F.shape[1],100,16])
output = torch.bmm(input_3D,F) # output has shape [16,1024,16] in your case
... # subsequent steps (normalization, activation function, etc.)

根据您期望实现这一点的方式,您可能需要重新排列F的元素以实现所需的转换。

最新更新