Я пытаюсь добавить 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, которая не равна выходу. При использовании Highway Wrapper размеры входа и выхода должны быть одинаковыми. Как я мог решить эту проблему?