• Pytorch中的LSTM和LSTMCell


    LSTM

    class torch.nn.LSTM(*args, **kwargs)

    参数列表

    • input_size:x的特征维度
    • hidden_size:隐藏层的特征维度
    • num_layers:lstm隐层的层数,默认为1
    • bias:False则bih=0和bhh=0. 默认为True
    • batch_first:True则输入输出的数据格式为 (batch, seq, feature)
    • dropout:除最后一层,每一层的输出都进行dropout,默认为: 0
    • bidirectional:True则为双向lstm默认为False
    • 输入:input, (h0, c0)
    • 输出:output, (hn,cn)

    输入数据格式: 
    input(seq_len, batch, input_size) 
    h0(num_layers * num_directions, batch, hidden_size) 
    c0(num_layers * num_directions, batch, hidden_size)

    输出数据格式: 
    output(seq_len, batch, hidden_size * num_directions) 
    hn(num_layers * num_directions, batch, hidden_size) 
    cn(num_layers * num_directions, batch, hidden_size)

    Pytorch里的LSTM单元接受的输入都必须是3维的张量(Tensors).每一维代表的意思不能弄错。第一维体现的是序列(sequence)结构,也就是序列的个数,嘿嘿,也就是这一串的输入中,多少个明确的单元数,第二维度体现的是小块(mini-batch)结构,第三位体现的是输入的元素(elements of input)。如果在应用中不适用小块结构,那么可以将输入的张量中该维度设为1,但必须要体现出这个维度。下文的例子中,我们就不打算使用小块结构。

    假如我们要把下面这句话“The cow junped”送入网络,那么输入看起来像下面这样:

     

     

    注:上式中的 q后面跟一个单词,表示该单词的一定维度的向量表示,该维度即是LSTM接受的张量中的第三个维度。记住这里存在一个尺寸为1的第二维度。

    LSTMCell

    一个LSTM单元,相当于一个time step的处理。LSTMCell参数中没有num_layers(层数)、bidirectional(双向)、dropout选项。

    LSTMCell的输入是一个时间步x_t,需要写一个循环跑一个完整的序列。

    LSTM的输入是SEQUENCE of inputs x_1,x_2,…,x_T,因此不需要写循环。

    关于二者区别的讨论

    https://discuss.pytorch.org/t/lstm-and-lstmcell/7488

    https://stackoverflow.com/questions/57048120/pytorch-lstm-vs-lstmcell

     

    总之,根据需要和具体的场景选用。

  • 相关阅读:
    [LeetCode] 240
    [LeetCode] 169
    [LeetCode] 28
    [LeetCode] 27
    [LeetCode] 14
    [LeetCode] 9
    [LeetCode] 7
    [LeetCode] 2
    数据库开发规范
    Mysql优化
  • 原文地址:https://www.cnblogs.com/jiangkejie/p/10600185.html
Copyright © 2020-2023  润新知