cha*_*lfa 8 python neural-network deep-learning keras tensorflow
我正在尝试实现文章 ( https://arxiv.org/abs/1411.4389 ) 中的模型,该模型基本上由时间分布的 CNN 和一系列使用 Keras 和 TF 的 LSTM 组成。
但是,我在尝试确定是否应该TimeDirstibuted仅针对卷积和池化层或 LSTM包含该函数时遇到问题?
有没有办法并行运行 CNN 层(基于我要处理的序列中的帧数和我拥有的内核数)?
最后,假设每个条目由“n”帧(按顺序)组成,其中 n 根据当前数据条目而变化,最合适的输入维度是什么?“n”是批量大小吗?有没有办法将 // 中的 CNN 数量限制为例如 4(以便在处理 4 帧后获得输出 Y)?
PS:输入是小视频(即帧序列)
PS:输出维度与我的问题无关,所以这里不讨论
谢谢
[已编辑]
抱歉,只有一个链接的答案很糟糕。所以我试着一一回答问题。
我是否应该只为我的卷积和池化层或 LSTM 包含 TimeDirstibuted 函数?
仅将 TimeDistributed 函数用于 Conv 和 Pooling 层,不需要 LSTM。
有没有办法并行运行 CNN 层?
不,如果您使用 CPU。如果您使用 GPU,这是可能的。
使用 Keras 在 TensorFlow 上进行透明的多 GPU 训练
什么是最合适的输入维度?
五。(批次、时间、宽度、高度、通道)。
有没有办法将 // 中 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'))
Run Code Online (Sandbox Code Playgroud)