H.R*_*ort 4 recurrent-neural-network pytorch
在阅读了这个问题的答案后,我对整个 PackedSequence 对象的事情仍然有点困惑。据我了解,这是一个针对循环模型中可变大小序列的并行处理而优化的对象,零填充是一个[不完美]解决方案。看起来,给定一个 PackedSequence 对象,Pytorch RNN 将处理批次中的每个序列直至结束,并且不会继续处理填充。那么为什么这里需要填充呢?为什么同时存在 pack_padded_sequence() 和 pack_sequence() 方法?
主要是由于历史原因;torch.nn.pack_padded_sequence()
是之前创建的torch.nn.pack_sequence()
(如果我没看错的话,后者是0.4.0
第一次出现),我想没有理由删除此功能并破坏向后兼容性。
此外,并不总是清楚什么是最好/最快的pad
输入方式,并且它因您使用的数据而异。当数据预先以某种方式填充时(例如,您的数据已预先填充并像这样提供给您),使用起来会更快pack_padded_sequence()
(请参阅的源代码pack_sequence
,它会length
为您计算每个数据点并pad_sequence
在pack_padded_sequence
内部进行调用)。但可以说pad_packed_sequence
现在很少使用。
最后,请注意自版本以来这两个函数enforce_sorted
提供的参数。1.2.0
不久前,用户必须以最长序列在前、最短序列在后的方式对数据(或批次)进行排序,现在当此参数设置为 时,可以在内部完成此操作False
。
归档时间: |
|
查看次数: |
3088 次 |
最近记录: |