как добавить Highway Wrapper в многослойный двунаправленный lstm в тензорном потоке - PullRequest
0 голосов
/ 06 сентября 2018

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

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, вы можете попытаться реализовать rnn_fw и rnn_bw самостоятельно и добавить остаточные соединения к ним отдельно. Затем вы можете объединить их выводы и использовать объединенный вектор в качестве входных данных для более высокого уровня bi-rnn.

...