一个实例搞懂LSTM,多层LSTM和双向LSTM,附torch代码

# 首先导入LSTM需要的相关模块
import torch
import torch.nn as nn           


rnn = nn.LSTM(10, 25, 4,bidirectional=True)
# torch.nn.lstm(input_size,hidden_size,num_layers,bias,batch_first,dropout,bidirectional)
	# 主要参数
	# input_size – 输入的特征维度
	# hidden_size – 隐状态的特征维度,和输出向量维度一样
	# num_layers – 层数(和时序展开要区分开)
	# bias – 如果为False,那么LSTM将不会使用偏置,默认为True。
	# batch_first – 如果为True,那么输入和输出Tensor的形状为(batch, seq_len, input_size)
	# dropout – 如果非零的话,将会在RNN的输出上加个dropout,最后一层除外。
	# bidirectional – 如果为True,将会变成一个双向RNN,默认为False

input = torch.randn(5, 3, 10)
# input (seq_len, batch, input_size)
# seq_len序列长度表示每个batch输入多少数据比如文本的长度,5
# batch表示把数据分成了batch批,3
# input_size为样本特征维度比如每个单词的向量表示,10


h0 = torch.randn(8, 3, 25)
c0 = torch.randn(8, 3, 25)
# hn是一个三维张量,第一维是num_layers*num_directions,bidirectional为2时,num_directions表示是否为双向LSTM;
# 第二维表示一批的样本数量;
# 第三维表示隐藏层特征维度。
# c_n与h_n一致,初始化的隐藏元和记忆元,通常它们的维度是一样的



output, (hn, cn) = rnn(input, (h0, c0))
# output(seq_len, batch, hidden_size * num_directions)
# 第一维表示seq_len
# 第二维表示batch
# 第三维hidden_size隐藏层大小,双向则二倍,单向则等价于隐藏层大小


             
观察输出
print(output.size(),hn.size(),cn.size())

 torch.Size([5, 3, 50]) torch.Size([8, 3, 25]) torch.Size([8, 3, 25])

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