我试图从文章(https://arxiv.org/abs/1411.4389)中实现模型,该文章基本上由时间分布的CNN组成,后面跟着一系列使用Keras和TF的LSTM。
但是,我在试图弄清楚是否应该为我的Convolutional& amp;包括Preferences
函数时遇到问题。汇集图层还是LSTM?
有没有办法并行运行CNN图层(基于我想要处理的序列中的帧数以及我所拥有的核心数量)?
最后,假设每个条目由“n”个帧(按顺序)组成,其中n根据当前数据条目而变化,最合适的输入维度是什么?并且“n”是批量大小?有没有办法将//中的CNN数量限制为例如4(以便在处理4帧后得到输出Y)?
P.S。:输入是小视频(即一系列帧)
P.S。:输出维度与我的问题无关,因此这里不讨论
谢谢
答案 0 :(得分:4)
将帖子
对不起,只有一个链接答案很糟糕。所以我试着逐一回答问题。
如果我应该为我的Convolutional& amp;包括TimeDirstibuted功能汇集图层还是LSTM?
仅对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'))