gpt4 book ai didi

Tensorflow:联合训练CNN+LSTM

转载 作者:行者123 更新时间:2023-12-01 03:25:04 24 4
gpt4 key购买 nike

关于如何在 TF 中单独使用 LSTM 的例子很多,但我找不到任何关于如何联合训练 CNN + LSTM 的好例子。
在我看来,如何进行这样的训练并不是很简单,我可以在这里想到几个选项:

  • 首先,我相信最简单的解决方案(或最原始的解决方案)是独立训练 CNN 以学习特征,然后在不更新 CNN 部分的情况下在 CNN 特征上训练 LSTM,因为可能必须在 numpy 中提取和保存这些特征然后将它们提供给 TF 中的 LSTM。但在这种情况下,人们可能不得不使用不同标记的数据集进行 CNN 的预训练,这消除了端到端训练的优势,即学习 LSTM 所针对的最终目标的特征(除了必须拥有这些首先是附加标签)。
  • 第二种选择是连接批处理中的所有时间片
    维度(4-d 张量),将其提供给 CNN,然后以某种方式重新打包
    训练 LSTM 所需的 5-d 张量特征,然后应用成本函数。我主要担心的是,是否有可能做这样的事情。此外,处理可变长度序列变得有点棘手。例如,在预测场景中,您一次只能输入单帧。因此,如果这是进行联合训练的正确方式,我会很高兴看到一些例子。除此之外,这个解决方案看起来更像是一个黑客,因此,如果有更好的方法可以做到这一点,如果有人可以分享它会很棒。

  • 先感谢您 !

    最佳答案

    对于联合训练,您可以考虑使用文档 https://www.tensorflow.org/api_docs/python/tf/map_fn 中所述的 tf.map_fn .

    让我们假设 CNN 是按照此处所述的类似路线构建的 https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10.py .

    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

    警告:您可能需要查看 https://www.tensorflow.org/tutorials/using_gpu 此处所述的设备放置。如果您的模型大于 gpu 可以分配的内存。

    另一种方法是展平视频批处理以创建图像批处理,从 CNN 进行前向传递并 reshape LSTM 的特征。

    关于Tensorflow:联合训练CNN+LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41972573/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com