【问题标题】:Variable length of text with cnn pytorch使用 cnn pytorch 可变长度的文本
【发布时间】:2019-12-06 04:59:34
【问题描述】:

我是 pytorch 的新手,我想知道 CNN 中可变长度句子序列的最佳实践是什么。

我想在 fasttext 生成的词嵌入之上使用 CNN 进行特征选择,然后将输出输入 LSTM。

现在我知道 pytorch 有一个动态图,我想知道除了填充之外是否有其他方法

【问题讨论】:

    标签: python-3.x machine-learning deep-learning conv-neural-network pytorch


    【解决方案1】:

    虽然 PyTorch 有动态图构建,但无法在同一个批次中为不同的序列动态构建不同的图。 因此,可以使用任意长度的单个序列执行stochastic gradient descent,但不可能在没有填充的情况下执行batch梯度下降。

    为了提高训练效率并避免在填充值上进行训练,PyTorch 具有 torch.nn.utils.rnn.pack_padded_sequence 函数和 torch.nn.utils.rnn.pad_packed_sequence 来删除然后替换批处理操作的填充。

    # pack_padded_sequence so that padded items in the sequence won't be shown to the LSTM
    X = torch.nn.utils.rnn.pack_padded_sequence(x, X_lengths, batch_first=True)
    
    # now run through LSTM
    X, self.hidden = self.lstm(X, self.hidden)
    
    # undo the packing operation
    X, _ = torch.nn.utils.rnn.pad_packed_sequence(X, batch_first=True)
    

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2021-04-26
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2021-07-15
      • 2019-02-13
      • 1970-01-01
      • 2016-12-01
      相关资源
      最近更新 更多