关于如何在TF中单独使用LSTM有很多例子,但我找不到任何关于如何联合训练CNN + LSTM的好例子。 从我看来,如何进行此类培训并不是一件容易的事,我可以在这里考虑几个选项:
提前谢谢!
答案 0 :(得分:2)
对于联合培训,您可以考虑使用文档pipe()中所述的tf.map_fn。
让我们假设CNN是按照此处https://www.tensorflow.org/api_docs/python/tf/map_fn所述的类似线路构建的。
def joint_inference(sequence):
inference_fn = lambda image: inference(image)
logit_sequence = tf.map_fn(inference_fn, sequence, dtype=tf.float32, swap_memory=True)
lstm_cell = tf.contrib.rnn.LSTMCell(128)
output_state, intermediate_state = tf.nn.dynamic_rnn(cell=lstm_cell, inputs=logit_sequence)
projection_function = lambda state: tf.contrib.layers.linear(state, num_outputs=num_classes, activation_fn=tf.nn.sigmoid)
projection_logits = tf.map_fn(projection_function, output_state)
return projection_logits
警告:如果您的模型大于内存gpu可以分配的模型,您可能需要按照https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10.py中所述查看设备放置。
替代方案是展平视频批处理以创建图像批处理,从CNN执行正向传递并重塑LSTM的功能。