我试图弄清楚在输入上运行RNN是否更有效,然后在这些输出上重复运行另一个RNN(一次一个水平层)。或者为所有图层一次运行一个时间步骤(一次一个垂直图层)。
我知道tensorflow的MultiCellRNN类可以做后者。为什么选择这种方法超过前者?前者同样有效吗?是否有情况下,所有图层一次只能进行一次时间步骤?
有关多层RNN的参考,请参阅http://karpathy.github.io/2015/05/21/rnn-effectiveness/。
答案 0 :(得分:2)
1:如何轻松实施RNN 使用lstm单元格,它们通常更好(没有消失的梯度问题)和tensorflow使得通过它实现它们非常容易:
来自tensorflow.python.ops.rnn_cell的导入BasicLSTMCell ... cell = BasicLSTMCell(state_dim) stacked_lstm = tf.nn.rnn_cell.MultiRNNCell([cell] * num_layers,state_is_tuple = True)
在tensorflow网站上了解更多信息:https://www.tensorflow.org/tutorials/recurrent/
2:水平还是深? 就像您可以拥有多层神经网络一样,您也可以拥有多层RNN。将RNN单元视为神经网络中的一个层,这是一个允许您记住顺序输入的特殊层。根据我的经验,您的网络中仍然会有线性变换(或深度),但是拥有多层lstm单元的问题取决于您的网络拓扑,首选项和计算能力。 (越多越好)输入和输出的数量取决于你的问题,并且据我所知,没有多个水平RNN单元,只有深度。 所有计算都是一次深入地进行一次输入。 您引用的多层函数非常棒,它可以为您处理所有计算,只需告诉它您需要多少个单元格,剩下的就完成了。
祝你好运
答案 1 :(得分:0)
如果按顺序运行所有内容,那么这两种方法之间的性能差异就不会太大(除非我在这里监督了具有缓存局部性的内容)。后一种方法的主要优点是您可以并行化多个层的计算。
例如不必等待输入传播到2层,您可以在当前时间步的结果传播到第二层时,已经开始在第一层中计算下一个时间步。
免责声明:我不会认为自己是绩效专家。