如何实现可变长度的递归神经网络?

3
1个回答

3
很遗憾,'可变长度'的神经网络是不存在的。这是因为网络无法知道用哪些权重来处理它没有训练过的额外输入节点。
然而,你在那个页面上看到 '可变长度' 的原因是因为它们可以处理:
a b c d e
a b c d e f g h
a b c d
a b

as

a b c d e 0 0 0
a b c d e f g h
a b c d 0 0 0 0
a b 0 0 0 0 0 0

他们会将所有“空”变量转换为0。这是有道理的,因为无论权重如何,0都不会对网络的隐藏层产生任何影响,因为anything*0=0
所以基本上,你可以有“可变长度”的输入,但你必须定义一些最大大小;所有小于该大小的输入都应该用零填充。
另一方面,如果你正在分类句子,你可以使用LSTM/GRU网络来顺序处理输入。

3
你所写的部分内容是不正确的。RNN旨在处理变长输入,这并不是网络的限制,而是张量的限制(由pytorch设计)。如果你每次训练步骤只传递一个样本(将批大小设为1),则仍然可以将可变输入传递到pytorch中的RNN,而不需要进行任何填充。填充只有在想要处理小批量数据时才会用到,由于张量在技术上无法具有任何可变大小的维度,因此必须使用填充。 - entrophy
这并没有回答问题。显然,根据网站上的说法,RNN支持可变长度序列:“nn.RNN,nn.LSTM,nn.GRU现在支持小批量,其中序列长度可变。” - mikal94305
1
循环神经网络中的可变长度输入并不是指每个样本的大小是可变的,而是指等长输入序列的大小是可变的。想象一下学习单词序列 - 当切换到新的句子时,需要重置权重。句子的长度可以是可变的。 - Radu Simionescu
@RaduSimionescu, 等长输入序列的大小可变是什么意思? "cat is big","dog is small" - 这两个序列具有相等长度的输入(3个单词)。这里的序列大小再次指的是什么? - theprogrammer
这是很久以前的事了。@theprogrammer,我想我当时想说的是,尽管RNN在预测过程中可以接受可变数量的标记,但在训练过程中,您将需要确定每个句子的标记大小,并根据需要进行一些填充,以便将不同大小的训练句子集表示为一个大张量。您将希望将训练数据分批提供给您的任何框架,否则训练将会很慢。 - Radu Simionescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接