【问题标题】:How do you implement variable-length recurrent neural networks?你如何实现可变长度的递归神经网络?
【发布时间】:2017-11-22 09:36:37
【问题描述】:

什么是循环神经网络 (RNN) 中可变长度序列输入的完整工作示例(不是 sn-ps)?

例如,据称 PyTorch 可以实现可变长度序列作为 RNN 的输入,但似乎没有完整工作代码的示例。

相关: https://github.com/pytorch/pytorch/releases/tag/v0.1.10 https://discuss.pytorch.org/t/about-the-variable-length-input-in-rnn-scenario/345

【问题讨论】:

    标签: machine-learning tensorflow neural-network recurrent-neural-network pytorch


    【解决方案1】:

    遗憾的是,没有“可变长度”神经网络这样的东西。这是因为网络无法“知道”哪些权重用于未经过训练的额外输入节点。

    但是,您在该页面上看到“可变长度”的原因是因为它们处理:

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

    作为

    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 网络按顺序处理输入。

    【讨论】:

    • 你写的部分不正确。 RNN 旨在处理可变输入。它不是网络的限制,而是张量的限制(由 pytorch 设计)。如果您在每个训练步骤中执行单个样本(通过使批量大小 = 1),您仍然可以将变量输入传递给 pytorch 中的 RNN,而无需任何填充。如果你想处理一个小批量,填充就会发挥作用,因为从技术上讲,张量的任何维度都不能具有可变大小,所以你必须求助于填充。
    • 这没有回答问题。显然,RNN 支持可变长度序列,根据网站:“nn.RNN、nn.LSTM、nn.GRU 现在支持序列长度可变的小批量。”
    • 循环神经网络中的可变长度输入并不是指每个样本的大小可变,而是等长输入序列的大小可变。想象一下学习单词序列——你需要在切换到一个新句子时重新设置权重。句子可以是可变长度的
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2012-04-23
    • 2019-10-11
    • 2017-12-14
    相关资源
    最近更新 更多