我知道如何在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)
非常感谢任何帮助!
答案 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)