Pytorch实现多层lstm
P y t o r c h 实现多层 l s t m Pytorch实现多层lstm Pytorch实现多层lstm
推荐一下:深度学习AI-计算机视觉(CV)-整体解决方案课件(Yolo+Flask+Vue+Waitress+Nginx)
视频教程:https://www.bilibili.com/video/BV19h4y1874T/?spm_id_from=333.999.0.0
# 10:输入数据维度大小 20 :隐状态的特征维度 2:层数,表示用来两层lstm
lstm = nn.LSTM(10, 20, 2)
# 5:序列长度 3:单个训练数据长度 10:单个序列维度 举个例子:每次运行时取3个含有5个字的句子(且句子中每个字的维度为10)
input = Variable(torch.randn(5, 3, 10))
# 2个LSTM层,batch_size=3, 隐藏层的特征维度20
h0 = Variable(torch.randn(2, 3, 20))
# 2个LSTM层,batch_size=3, 隐藏层的特征维度20
# 这里有2层lstm,output是最后一层lstm的每个词向量对应隐藏层的输出,其与层数无关,只与序列长度相关
c0 = Variable(torch.randn(2, 3, 20))
#
output, hn = lstm(input, (h0, c0))
class RNN(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
super(RNN, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size, hidden_size, num_layers,
batch_first=True)
self.fc = nn.Linear(hidden_size, num_classes) # 2 for bidirection
def forward(self, x):
# Forward propagate RNN
out, _ = self.lstm(x)
# Decode hidden state of last time step
out = self.fc(out[:, -1, :])
return out
rnn = RNN(input_size, hidden_size, num_layers, num_classes)
rnn.cuda()
class torch.nn.LSTM( args, * kwargs)[source]
将一个多层的 (LSTM) 应用到输入序列。
参数说明:
- input_size – 输入的特征维度
- hidden_size – 隐状态的特征维度
- num_layers – 层数(和时序展开要区分开)
- bias – 如果为False,那么LSTM将不会使用 b i h , b h h b_{ih},b_{hh} bih,bhh,默认为True。
- batch_first – 如果为True,那么输入和输出Tensor的形状为(batch, seq, feature)
- dropout – 如果非零的话,将会在RNN的输出上加个dropout,最后一层除外。
- bidirectional – 如果为True,将会变成一个双向RNN,默认为False。
LSTM输入: input, (h_0, c_0)
- input (seq_len, batch, input_size): 包含输入序列特征的Tensor。也可以是packed
variable ,详见
[pack_padded_sequence](#torch.nn.utils.rnn.pack_padded_sequence(input,
lengths, batch_first=False[source]) - h_0 (num_layers * num_directions, batch,
hidden_size):保存着batch中每个元素的初始化隐状态的Tensor - c_0 (num_layers * num_directions, batch, hidden_size):
保存着batch中每个元素的初始化细胞状态的Tensor
LSTM输出 output, (h_n, c_n)
- output (seq_len, batch, hidden_size * num_directions):
保存RNN最后一层的输出的Tensor。
如果输入是torch.nn.utils.rnn.PackedSequence,那么输出也是torch.nn.utils.rnn.PackedSequence。 - h_n (num_layers * num_directions, batch, hidden_size):
Tensor,保存着RNN最后一个时间步的隐状态。 - c_n (num_layers * num_directions, batch, hidden_size):
Tensor,保存着RNN最后一个时间步的细胞状态。
LSTM模型参数:
- weight_ih_l[k] – 第k层可学习的input-hidden权重( W i i ∣ W i f ∣ W i g ∣ W i o W_{ii}|W_{if}|W_{ig}|W_{io} Wii∣Wif∣Wig∣Wio),形状为(input_size x4*hidden_size)
- weight_hh_l[k] –第k层可学习的hidden-hidden权重( W h i ∣ W h f ∣ W h g ∣ W h o W_{hi}|W_{hf}|W_{hg}|W_{ho} Whi∣Whf∣Whg∣Who),形状为(hidden_size x 4*hidden_size)。
- bias_ih_l[k] – 第k层可学习的input-hidden偏置( b i i ∣ b i f ∣ b i g ∣ b i o b_{ii}|b_{if}|b_{ig}|b_{io} bii∣bif∣big∣bio),形状为(4*hidden_size)
- bias_hh_l[k] –第k层可学习的hidden-hidden偏置( b h i ∣ b h f ∣ b h g ∣ b h o b_{hi}|b_{hf}|b_{hg}|b_{ho} bhi∣bhf∣bhg∣bho),形状为( 4*hidden_size)。 示例: