如何在张量流中向多层双向lstm添加Highway Wrapper

时间:2018-09-06 10:50:19

标签: python tensorflow lstm rnn bidirectional

我正在尝试将Tensorflow中的Highway Wrapper或Residual Wrapper添加到双向LSTM中。代码如下:

def lstm_cell(self):
    cell = tf.contrib.rnn.LSTMCell(num_units=self.num_units, forget_bias=1.0, state_is_tuple=True, initializer=orthogonal_initializer())
    cell = tf.contrib.rnn.HighwayWrapper(cell)

cells_fw = [self.lstm_cell() for _ in range(self.layer_num)]                                                                                                                                   
cells_bw = [self.lstm_cell() for _ in range(self.layer_num)]                                                                                                                                   
outputs, _, _ = tf.contrib.rnn.stack_bidirectional_dynamic_rnn(cells_fw=cells_fw, cells_bw=cells_bw, inputs=self.features, dtype=tf.float32)

tf.contrib.rnn.stack_bidirectional_dynamic_rnn的每一层将输出一个张量,其深度为num_units * 2(由正向和反向输出连接)。因此,输出的深度为num_units *2。但是输入的深度为num_units,不等于输出。使用高速公路包装机时,输入和输出的尺寸必须相同。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您可以尝试自己实现rnn_fw和rnn_bw,并将剩余的连接分别添加到它们。然后,您可以连接它们的输出,并使用连接的矢量作为更高级别的bi-rnn的输入。