【问题标题】:Keras/TF: Time Distributed CNN+LSTM for visual recognitionKeras/TF:用于视觉识别的时间分布式 CNN+LSTM
【发布时间】:2017-06-27 10:50:26
【问题描述】:

我正在尝试实现文章 (https://arxiv.org/abs/1411.4389) 中的模型,该模型基本上由时间分布的 CNN 和一系列使用 Keras 和 TF 的 LSTM 组成。

但是,我在试图确定是否应该仅将 TimeDirstibuted 函数包含在我的卷积和池化层或 LSTM 中时遇到问题?

有没有办法并行运行 CNN 层(基于我想要处理的序列中的帧数和我拥有的核心数)?

最后,假设每个条目由“n”帧(按顺序)组成,其中 n 根据当前数据条目而变化,最合适的输入维度是多少? “n”是批量大小吗?有没有办法将 // 中的 CNN 数量限制为例如 4 个(以便在处理 4 帧后得到输出 Y)?

P.S.:输入是小视频(即帧序列)

P.S.:输出维度与我的问题无关,这里不讨论

谢谢

【问题讨论】:

    标签: python tensorflow neural-network deep-learning keras


    【解决方案1】:

    [已编辑]
    抱歉,只有链接答案不好。所以我试着一一回答。

    我是否应该只为我的卷积和池化层或 LSTM 包含 TimeDirstibuted 函数?

    仅对 Conv 和 Pooling 层使用 TimeDistributed 函数,不需要 LSTM。

    有没有办法并行运行 CNN 层?

    不,如果您使用 CPU。如果你使用 GPU,这是可能的。
    Transparent Multi-GPU Training on TensorFlow with Keras

    什么是最合适的输入维度?

    五个。 (批次、时间、宽度、高度、通道)。

    有没有办法将 // 中的 CNN 数量限制为例如 4 个

    您可以在预处理中通过手动将帧对齐到特定数字来执行此操作,而不是在网络中。换句话说,如果你想在处理 4 帧之后有输出,“时间”维度应该是 4。

    model = Sequential()
    
    model.add(
        TimeDistributed(
            Conv2D(64, (3, 3), activation='relu'), 
            input_shape=(data.num_frames, data.width, data.height, 1)
        )
    )
    model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(1, 1))))
    
    model.add(TimeDistributed(Conv2D(128, (4,4), activation='relu')))
    model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
    
    model.add(TimeDistributed(Conv2D(256, (4,4), activation='relu')))
    model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2))))
    
    # extract features and dropout 
    model.add(TimeDistributed(Flatten()))
    model.add(Dropout(0.5))
    
    # input to LSTM
    model.add(LSTM(256, return_sequences=False, dropout=0.5))
    
    # classifier with sigmoid activation for multilabel
    model.add(Dense(data.num_classes, activation='sigmoid'))
    

    参考:
    PRI-MATRIX FACTORIZATION - BENCHMARK

    【讨论】:

    • 我收到以下错误:ValueError:检查输入时出错:预期 seq_input 有 5 个维度,但得到的数组形状为 (64, 224, 224, 3) 如何从 train_datagen 重塑输入。 flow_from_directory?
    • softmax 而不是 sigmoid if num_classes>1
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2020-12-13
    • 2020-02-24
    相关资源
    最近更新 更多