pytorch 调用 nn.LSTM 的代码,github 上搜了一些范例代码感觉那些写代码的人思路上也挺混乱的。比如 batch_size 是 32, 最大序列长度 50 ,每个词用 10 个向量表示,那么 dataloader 给出的数据形状应该是[32, 50, 10]
import torch.nn as nn
input = torch.randn(32, 50, 10)
lstm_layer = nn.LSTM(10, 20, 1, batch_first=True)
output, (_, _) = lstm_layer(input)
# 输出形状是[32, 50, 20]
看网上很多文章都是按上述代码的方式输入的,是不是使用错误了?网上文章都说输入序列在 batch_first 的情况下应该是[batch_size, seq_len, input_dim],包括 torch 的文档里也是这么写的。
但是又有些代码的写法是要转换-1 和-2 维,即输入[32, 10, 50]->LSTM(50,100,batch_first=True)->输出[32, 10, 100]这种感觉的形状。
想问一下按人类的逻辑( RNN 应该按序列顺序循环输入,即循环 50 次)应该采用上述哪种写法?正常来说应该是按文档要求的写,但是诡异的是转换维数的那些代码也能跑而且还能收敛,这是咋回事。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.