如何将GRU输出的[1,4,256] cuda.FloatTensor转为[1,1,256]?
解决PyTorch中GRU隐藏向量维度转换问题
这问题我太熟悉了——你遇到的是PyTorch索引操作时的自动降维问题,用两种简单的方法就能把[1,256]的张量恢复成[1,1,256]的目标形状:
方法1:用unsqueeze()手动添加维度
unsqueeze(dim)可以在指定位置插入一个新维度,这里我们需要在第1个维度(索引从0开始)插入维度,代码如下:
# 假设你要取的是第index个时间步的隐藏向量 decoder_hidden = encoder_hidden[:, index].unsqueeze(1)
执行后,原本形状为[1,256]的张量就会变成[1,1,256],完全符合你的需求。
方法2:用切片替代单个索引
PyTorch的切片操作不会自动挤压维度,所以你可以通过index:index+1的切片方式来保留维度:
decoder_hidden = encoder_hidden[:, index:index+1]
这种方法更直接,切片后的结果直接就是[1,1,256]的形状,不需要额外的维度操作。
为什么原来的代码不行?
当你使用encoder_hidden[:, index]这种单个索引取值时,PyTorch会自动移除那个被索引的维度(这里就是第1个维度,对应时间步的维度),所以结果从[1,4,256]变成了[1,256]。而上面两种方法要么手动补回维度,要么用切片保留维度,完美解决问题。
内容的提问来源于stack exchange,提问作者Shiloh_C
相关产品推荐
相关产品推荐

