2017-04-17 84 views
1

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

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

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

这项工作?

请指导。

谢谢

回答

0

RNNs应是可执行的只有一个循环(scan/map_fn /等都是基于while_loop与一个或多个TensorArray S),其传递的状态,一个所有计算的损失。这些结构的一个优点是你的图是固定大小的,但迭代次数可以变化(或者在不增加图大小的情况下变得非常大)。

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