【问题标题】:Arbitrary length inputs for CNNs in sequential learning顺序学习中 CNN 的任意长度输入
【发布时间】:2020-04-13 19:10:27
【问题描述】:

An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling 中,作者指出,TCN 网络,一种应用于序列数据的特定类型的一维 CNN,“也可以通过滑动一维卷积核来接收任意长度的输入”,就像循环网络一样。我在问自己如何做到这一点。

对于 RNN,直接应用相同的函数的频率与输入长度的频率一样多。然而,对于 CNN(或任何一般的前馈 NN),必须预先指定输入神经元的数量。因此,我可以看到 TCN 处理任意长度输入的唯一方法是指定一个 固定 长度的输入神经元空间,然后将零填充添加到任意长度的输入。

我的理解正确吗?

【问题讨论】:

    标签: conv-neural-network recurrent-neural-network sequential


    【解决方案1】:

    如果您有一个完全卷积的神经网络,则没有理由有一个完全指定的输入形状。你肯定需要一个固定的等级,最后一个维度可能应该是相同的,但除此之外,你绝对可以指定一个输入形状,在tensorflow 中,在 1D-CNN 的情况下看起来像 Input((None, 10))

    确实,卷积核的形状不取决于时间维度中输入的长度(它可以取决于最后一个维度,尽管通常在卷积神经网络中),您可以将其应用于任何输入相同的排名(和相同的最后一个维度)。

    例如,假设您只应用了一个 1D 卷积,其内核对 2 个相邻元素 (kernel = (1, 1)) 进行求和。这个操作可以应用于任何输入长度,因为它总是一维的。

    但是,当面临序列到标签任务并需要在堆栈中进行进一步操作(例如全连接层)时,输入必须是固定长度(或必须通过零填充来实现)。

    【讨论】:

    • 感谢 Zaccharie 的回答!我完全同意你对一个一维卷积操作和全卷积神经网络的解释。然而,在序列学习任务中的大多数情况下,我们通常会预测一些标签,比如句子中的下一个单词,因此在卷积操作之后需要一个全连接层(或其他一些与维度相关的操作)。对于这种实际情况,您是否同意我们需要预先指定输入神经元的数量,因为否则可能无法使用其中一些完全连接的神经元(我也不知道如何实现)。
    • 我认为在序列到标签学习的情况下,如果您想使用卷积,您可以按照您链接的文章的图 1 所示进行操作,即应用几层-trous 他们称之为扩张的),因果与否,卷积。如果您需要使用密集(全连接)层,那么您肯定需要一个固定的输入大小,因此需要一些零填充(不要与他们在文章中使用的零填充混淆,即执行卷积保持每一步都相似的序列维度)。
    • 太棒了,谢谢! :-) 我认为这解决了它。任何确认这个答案的人 - 不仅仅是从实践(想想 DL 库),而是从理论/概念的角度 - 都非常受欢迎!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2021-04-15
    • 1970-01-01
    • 2022-10-19
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多