【发布时间】:2019-12-06 04:59:34
【问题描述】:
我是 pytorch 的新手,我想知道 CNN 中可变长度句子序列的最佳实践是什么。
我想在 fasttext 生成的词嵌入之上使用 CNN 进行特征选择,然后将输出输入 LSTM。
现在我知道 pytorch 有一个动态图,我想知道除了填充之外是否有其他方法
【问题讨论】:
标签: python-3.x machine-learning deep-learning conv-neural-network pytorch
我是 pytorch 的新手,我想知道 CNN 中可变长度句子序列的最佳实践是什么。
我想在 fasttext 生成的词嵌入之上使用 CNN 进行特征选择,然后将输出输入 LSTM。
现在我知道 pytorch 有一个动态图,我想知道除了填充之外是否有其他方法
【问题讨论】:
标签: python-3.x machine-learning deep-learning conv-neural-network pytorch
虽然 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)
【讨论】: