【问题标题】:Building dynamic_rnn from scratch in tensorflow在 tensorflow 中从头开始构建 dynamic_rnn
【发布时间】:2017-04-17 18:46:46
【问题描述】:

我正在编写类似于 tensorflow 提供的 dynamic_rnn 的 rnn。我试图在 GitHub 上查看代码,但无法理解他们是如何实现的。我想从头开始构建它,以便我可以从内部自定义 rnn。该怎么做?

目前,我的方法是将截断的时间序列视为张量,使用 tf.scan() 并为所有时间序列找到新的隐藏状态。然后使用 tf.map_fn 查找新堆叠隐藏变量的输出。最后,使用 tf.while_loop() 找出每个张量在堆叠输出的第一维上的误差,并使用该损失进行反向传播。

我担心这样做后图表会是动态的。我的意思是说首先我展开了 5 次,然后 4 次图会擦除一个节点之前滚动的吗?

这行得通吗?

请指导。

谢谢,

【问题讨论】:

    标签: python-2.7 dynamic tensorflow recurrent-neural-network


    【解决方案1】:

    RNN 应该只用一个循环就可以实现(scan/map_fn/etc. 都基于带有一个或多个TensorArrays 的while_loop),它通过状态并计算一个损失。这些构造的一个优点是您的图是固定大小的,但迭代次数可以变化(或者在不增加图大小的情况下非常大)。

    但是,对可变长度序列进行迭代通常不利于最大化性能。通常,要充分利用 CPU 上的 SIMD 指令或 GPU 上的并行性,至少需要进行一些批处理,在这种情况下,最好将您的序列切分并将这些段批处理在一起。 SequenceQueueingStateSaver 等工具可让您从许多可变长度序列中生成固定大小的批次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多