当前位置:   article > 正文

Pytorch实现多层lstm_多层lstm pytorch实现

多层lstm pytorch实现

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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} WiiWifWigWio),形状为(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} WhiWhfWhgWho),形状为(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} biibifbigbio),形状为(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} bhibhfbhgbho),形状为( 4*hidden_size)。 示例:
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/168074
推荐阅读
相关标签
  

闽ICP备14008679号