torch.nn.LSTM

什么是 LSTM

Understanding LSTM Networks 和 人人都能看懂的LSTM 这两篇文章介绍了 LSTM 的原理。本文的着重点在于 LSTM 的输入输出维度以及 torch.nn.LSTM 的使用。

LSTM 的输入输出

首先来看这张图
torch.nn.LSTM_第1张图片

input 序列的长度为 L L L ,包括 x 1 , x 2 , . . . , x n − 1 , x n ( n = L ) x_1, x_2, ..., x_{n-1}, x_n(n=L) x1,x2,...,xn1,xn(n=L) ,每个输入 x n x_n xn 的维度数 input_size 为 H i n H_{in} Hin 。所以,输入为 L × H i n L \times H_{in} L×Hin 的矩阵。
每个隐藏单元 h n ( w ) h_n^{(w)} hn(w) (每个蓝框)的尺寸 hidden_size 为 H c e l l H_{cell} Hcell ,而每个输入 x n x_n xn 顶上的蓝框数量称作 num_layers ,即层数 D D D 。最后一层的隐藏单元即为输出,大小为 L × H c e l l L \times H_{cell} L×Hcell

nn.LSTM

下面为 Pytorch 官方例子

rnn = nn.LSTM(10, 20, 2)				# 构建模型,(input_size, hidden_size, num_layers)->(H_in, H_cell, D)
input = torch.randn(5, 3, 10)		# 生成数据,(L, batch_size, H_in)
h0 = torch.randn(2, 3, 20)			# 初始隐藏单元,(num_layers, batch_size, hidden_size)->(D, batch_size, H_cell)
c0 = torch.randn(2, 3, 20)				# 一般用不到
output, (hn, cn) = rnn(input, (h0, c0))
# output.shape = (5, 3, 20)->(L, batch_size, H_cell)
#hn.shape = h0.shape
# cn.shape = c0.shape

你可能感兴趣的:(lstm,pytorch,深度学习)