我想在Tensorflow中创建一个多层双向LSTM。目前,我的单层模型如下:
cell_fw = tf.contrib.rnn.LSTMCell(hidden_size)
cell_bw = tf.contrib.rnn.LSTMCell(hidden_size)
(self.out_fw, self.out_bw), _ = tf.nn.bidirectional_dynamic_rnn(cell_fw, cell_bw, input, ...)为了将其转换为多层结构,我想我不能简单地将一些LSTMCell与MultiRNNCell包装成这样:
multi_cell_fw = tf.contrib.rnn.MultiRNNCell([cell_fw] * num_layers, ...)并将它们输入到bidirectional_dynamic_rnn中,因为每个层的前向和后向都需要前一层的正向和后向的输出。目前,我的解决方案是在一个循环中创建我的bidirectional_dynamic_rnn,输入前几层LSTM的级联输出。
然而,它并不是很干净,坦率地说,我不确定它是否正确,尽管它确实在一个玩具数据集上工作。有比使用MultiRNNCell之类的东西更优雅的方法吗?
我使用的是Tensorflow API r1.0。
发布于 2018-03-09 21:52:01
只要做:
multi_cell_fw = tf.contrib.rnn.MultiRNNCell([cell_fw for _ in range(num_layers)], ...)
那应该管用。
https://stackoverflow.com/questions/42660701
复制相似问题