在TensorFlow中合并serage模型(LSTM)

时间:2017-04-26 20:06:17

标签: deep-learning tensorflow keras

我知道如何在Keras中将不同的模型合并为一个。

first_model = Sequential()
first_model.add(LSTM(output_dim, input_shape=(m, input_dim)))

second_model = Sequential()
second_model.add(LSTM(output_dim, input_shape=(n-m, input_dim)))

model = Sequential()
model.add(Merge([first_model, second_model], mode='concat'))
model.fit([X1,X2])

我不知道如何在TensorFlow中这样做。

我有两个LSTM模型,想要合并它们(与上面的Keras示例相同)。

outputs_1, state_1 = tf.nn.dynamic_rnn(stacked_lstm_1, model_input_1)
outputs_2, state_2 = tf.nn.dynamic_rnn(stacked_lstm_2, model_input_2)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

正如评论中所说,我认为最简单的方法就是连接输出。我发现的唯一复杂因素是,至少我如何制作LSTM图层,他们的重量张量最终得到了完全相同的名称。这导致了一个错误,因为TensorFlow认为当我尝试制作第二层时权重已经完成了。如果您遇到此问题,可以使用变量范围解决此问题,该范围将应用于该LSTM图层中张量的名称:

with tf.variable_scope("LSTM_1"):
    lstm_cells_1 = tf.contrib.rnn.MultiRNNCell(tf.contrib.rnn.LSTMCell(256))
    output_1, state_1 = tf.nn.dynamic_rnn(lstm_cells_1, inputs_1)
    last_output_1 = output_1[:, -1, :]
# I usually work with the last one; you can keep them all, if you want

with tf.variable_scope("LSTM_2"):
    lstm_cells_2 = tf.contrib.rnn.MultiRNNCell(tf.contrib.rnn.LSTMCell(256))
    output_2, state_2 = tf.nn.dynamic_rnn(lstm_cells_2, inputs_2)
    last_output_2 = output_2[:, -1, :]

merged = tf.concat((last_output_1, last_output_2), axis=1)