【发布时间】:2018-05-08 07:09:31
【问题描述】:
数据为10个视频,每个视频分成86帧,每帧28*28像素,
video_num = 10
frame_num = 86
pixel_num = 28*28
我想使用 Conv2D+LSDM 来构建模型,并且在每个 time_steps(=frame_num=86) 发送模型中的像素数据 (=INPUT_SIZE=28*28)。所以以下是我关于模型的代码
BATCH_SIZE = 2 (just try)
TIME_STEPS=frame_num (=86)
INPUT_SIZE=pixel_num (=28*28)
model = Sequential()
model.add(InputLayer(batch_input_shape=(BATCH_SIZE, TIME_STEPS,
INPUT_SIZE)))
print (model.output_shape)
model.add(TimeDistributed(Conv2D(64,(1,3),strides=(1,1), padding='same',
data_format='channels_last'))) ##always the error here
print (model.output_shape)
model.add(TimeDistributed(MaxPooling2D(pool_size=(2,2),padding='same')))
print (model.output_shape)
model.add(TimeDistributed(Conv2D(64,(1,3),strides=(1,1),
data_format='channels_last', padding='same')))
print (model.output_shape)
model.add(TimeDistributed(MaxPooling2D(pool_size=(2,2),padding='same')))
print (model.output_shape)
model.add(TimeDistributed(Flatten()))
print (model.output_shape)
model.add(TimeDistributed(Dense(4096, activation='relu')))
print (model.output_shape)
model.add(LSTM(100, stateful=True, return_sequences=True))
print (model.output_shape)
model.add(Dense(1, activation='sigmoid'))
print (model.output_shape)
下图显示了来自命令行的错误
https://imgur.com/a/yAPQO 说“列表索引超出范围”
我认为错误与 TimeDistributed() 中的输入形状有关,它从上层 (InputLayer()) 获取输入,但我不知道如何修复错误。 我试图删除 InputLayer(),并使用
TimeDistributed(Conv2D(...), input_shape=(TIME_STEPS, INPUT_SIZE))
作为第一层,也报同样的错误...
如果有人知道这个错误,请分享你的想法,我将不胜感激。另外,我还是不太清楚batch_input_shape和input_shape的区别,有没有人用过这两个? 谢谢。
【问题讨论】: