Deep learning 将CNN提取的特征传递给LSTM时得到尺寸误差

Deep learning 将CNN提取的特征传递给LSTM时得到尺寸误差,deep-learning,lstm,keras-layer,Deep Learning,Lstm,Keras Layer,我正在使用keras中的深度学习进行视频分类。我已经用VGG16模型提取了特征,它的形状是(7,7512)。我有大约55000张图像。我将其传递给LSTM层,但得到了尺寸误差。 这是密码 print len(train_data) print train_data.shape[1:] print train_data.shape model = Sequential() model.add(LSTM(128,input_shape=train_data.shape[1:])) model.add

我正在使用keras中的深度学习进行视频分类。我已经用VGG16模型提取了特征,它的形状是(7,7512)。我有大约55000张图像。我将其传递给LSTM层,但得到了尺寸误差。 这是密码

print len(train_data)
print train_data.shape[1:]
print train_data.shape
model = Sequential()
model.add(LSTM(128,input_shape=train_data.shape[1:]))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(5, activation='softmax'))
这是输出

55936
(7, 7, 512)
(55936, 7, 7, 512)
Traceback (most recent call last):
File "train_rnn.py", line 135, in <module>
model.add(LSTM(128,input_shape=train_data.shape[1:]))
File "/usr/local/lib/python2.7/site-packages/keras/models.py", line 430, in add
layer(x)
File "/usr/local/lib/python2.7/site-    packages/keras/layers/recurrent.py", line 257, in __call__
return super(Recurrent, self).__call__(inputs, **kwargs)
File "/usr/local/lib/python2.7/site-packages/keras/engine/topology.py", line 534, in __call__
self.assert_input_compatibility(inputs)
File "/usr/local/lib/python2.7/site-packages/keras/engine/topology.py", line 433, in assert_input_compatibility
str(K.ndim(x)))
**ValueError**: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4`
55936
(7, 7, 512)
(55936, 7, 7, 512)
回溯(最近一次呼叫最后一次):
文件“train_rnn.py”,第135行,在
model.add(LSTM(128,input_shape=train_data.shape[1:]))
文件“/usr/local/lib/python2.7/site packages/keras/models.py”,第430行,添加
层(x)
文件“/usr/local/lib/python2.7/site-packages/keras/layers/recurrent.py”,第257行,在调用中__
返回超级(循环,自).\u调用(输入,**kwargs)
文件“/usr/local/lib/python2.7/site packages/keras/engine/topology.py”,第534行,在调用中__
self.assert\u输入\u兼容性(输入)
文件“/usr/local/lib/python2.7/site packages/keras/engine/topology.py”,第433行,在assert\u input\u compatibility中
str(K.ndim(x)))
**ValueError**:输入0与层lstm_1不兼容:预期ndim=3,发现ndim=4`
输入形状

带形状的3D张量(批量大小、时间步长、输入尺寸)(可选)2D 形状张量(批量大小、输出尺寸)

您在4D中的输入(包括输入长度)

尝试将其重塑为三维:

train_data = train_data.reshape(train_data.shape[0],
                   train_data.shape[1] * train_data.shape[2],
                   train_data.shape[3])
示例(这将引发
值错误

但这不会

X = np.zeros((5, 7, 7, 512)
X = X.reshape(5, 49, 512)

model = Sequential()
model.add(LSTM(128, input_shape=(49, 512)))
model.add(Dense(1, activation='softmax')
model.compile(loss='binary_crossentropy', optimizer='sgd')

你能分享你的代码吗?我想知道您是如何提取特征,然后将其传递给LSTM的。您的脚本演示,也许?您是如何将提取的特征传递到LSTM的?
X = np.zeros((5, 7, 7, 512)
X = X.reshape(5, 49, 512)

model = Sequential()
model.add(LSTM(128, input_shape=(49, 512)))
model.add(Dense(1, activation='softmax')
model.compile(loss='binary_crossentropy', optimizer='sgd')