变长序列输入到循环神经网络(RNNs)中的完整工作示例(不是代码片段)是什么?
例如,PyTorch据说可以实现变长序列作为RNNs的输入,但似乎没有完整工作代码的例子。
相关链接:https://github.com/pytorch/pytorch/releases/tag/v0.1.10https://discuss.pytorch.org/t/about-the-variable-length-input-in-rnn-scenario/345
回答:
遗憾的是,并不存在所谓的“变长”神经网络。这是因为网络无法“知道”对于未经训练的额外输入节点应使用哪些权重。
然而,你在那个页面上看到的“变长”,是因为它们处理:
a b c d ea b c d e f g ha b c da b
变成
a b c d e 0 0 0a b c d e f g ha b c d 0 0 0 0a b 0 0 0 0 0 0
它们将所有“空”变量转换为0
。这很有意义,因为0
不会对网络的隐藏层产生任何影响,无论权重如何,因为任何数乘以0等于0
。
所以,基本上,你可以有“变长”输入,但你必须定义某种最大尺寸;所有小于该尺寸的输入都应该用零填充。
另一方面,如果你在对句子进行分类,你可以使用LSTM/GRU网络来顺序处理输入。