本文主要介绍torch.nn.LSTM的num_layers参数以及bidirectional这两个参数的用法,因为在维度上比较绕,所以只看源码也许不太懂,本文用理解加验证的方式去学习如何用这两个参数
咱们统一batch_first=False,也就是默认的情况
设定一个batch,句子长度是50,batch_size=3,embedding_size=10,
设定一个LSTM,input_size=10,hidden_size=20
最简单的情况:
num_layers=1,bidirectional=False,我们知道nn.lstm会返回两个值一个是outputs,另外是一个tuple(h,c), h是hidden state,c是cell state
1.outputs=(word_len,batch_size,hidden_size)
def shp(_):
print(_.shape)
lstm=nn.LSTM(10,20,1,bidirectional=False)
batch1=torch.randn(50,3,10)
outputs,(h,c)=lstm(batch1)
shp(outputs) # word_len*batch_size*hidden_size
shp(h)
shp(c)
输出
torch.Size([50, 3, 20])
torch.Size([1, 3, 20])
torch.Size([1, 3, 20])
且最后一个word的output与hidden一样,取第一个句子验证一下
print(outputs[-1][0])
print(h[0][0])
输出