【发布时间】:2018-09-06 10:50:19
【问题描述】:
我正在尝试将 Highway Wrapper 或 Residual Wrapper 添加到 tensorflow 中的双向 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,不等于输出。使用 Highway Wrapper 时,输入和输出的维度必须相同。我该如何解决这个问题?
【问题讨论】:
标签: python tensorflow lstm rnn bidirectional