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 次)应该采用上述哪种写法?正常来说应该是按文档要求的写,但是诡异的是转换维数的那些代码也能跑而且还能收敛,这是咋回事。。
1
heqing 2022-07-22 21:14:09 +08:00
[batch_size, seq_len, input_dim]应该是正确写法
|
2
rpman 2022-07-22 21:57:32 +08:00 via iPhone
一般习惯是[batch_size, seq_len, input_dim]
|
3
Richard14 OP |