我创建了一个视频数据集,每个视频的尺寸为5(帧)x 32(宽)x 32(高)x 4(通道)。我尝试使用CNN LSTM网络对这些视频进行二分类,但我对输入形状和如何重塑我的数据集以训练网络感到困惑。
model = Sequential()
model.add(TimeDistributed(Conv2D(64, 5, activation='relu', padding='same', name='conv1', input_shape=??)))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same', name='pool1')))
model.add(TimeDistributed(Conv2D(64, 5, activation='relu', padding='same', name='conv2')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same', name='pool2')))
model.add(TimeDistributed(Conv2D(64, 5, activation='relu', padding='same', name='conv3')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same', name='pool3')))
model.add(TimeDistributed(Conv2D(64, 5, activation='relu', padding='same', name='conv4')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same', name='pool4')))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(256, return_sequences=False, dropout=0.5))
model.add(Dense(1, activation='sigmoid'))
我的模型中是否遗漏了什么?
回答:
你的输入形状应该是(batch_size, time steps, height, width, channels)
。因此,它应该是一个5维张量。
此外,你的input_shape
参数应该这样设置。它应该是TimeDistributed
层的参数,而不是Conv2D
层的参数,因为TimeDistributed
是第一层。这里,我展示了输入形状对于以下情况的设置:
- 任意数量样本的批次
- 5个时间步(视频帧)
- 32像素高(高度)
- 32像素宽(宽度)
- 4个通道
model.add(TimeDistributed(Conv2D(64, 5, activation='relu', padding='same', name='conv1'), input_shape=(5, 32, 32, 4)))