在tensorflow中从头开始构建dynamic_rnn

时间:2017-04-17 18:46:46

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

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

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

我担心这个图表在执行此操作后会是动态的。我的意思是说首先我展开了5次,然后4次图表将删除之前滚动的节点?

这会有用吗?

请指导。

谢谢,

1 个答案:

答案 0 :(得分:0)

只需一个循环就可以实现RNN(scan / map_fn /等等都基于while_loop,其中有一个或多个TensorArray s,它们通过状态和一次性计算损失。这些结构的一个优点是您的图形是固定大小的,但迭代次数可以变化(或者在不增加图形大小的情况下非常大)。

然而,迭代可变长度序列通常不是最大化性能的好方法。通常充分利用CPU上的SIMD指令或GPU上的并行性至少需要一些批处理,在这种情况下,最好切断序列并将这些段批处理在一起。有SequenceQueueingStateSaver之类的工具可以让你从许多变长序列中产生固定大小的批次。