在 tensorflow 中从头开始构建 dynamic_rnn

Building dynamic_rnn from scratch in tensorflow

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

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

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

这行得通吗?

请指导。

谢谢,

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

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