Python keras如何在卷积层之后将输入的大小更改为lstm层

时间:2016-02-07 13:34:41

标签: python machine-learning convolution keras lstm

卷积层和lstm层之间的连接有问题。数据具有形状(75,5),其中每个时间步长有75个时间步长×5个数据点。我想要做的是对(75x5)进行卷积,得到新的卷积(75x5)数据并将该数据提供给lstm层。但是,它不起作用,因为卷积层的输出形状具有我不需要的滤波器数量。因此,卷积层输出的形状为(1,75,5),并且lstm层所需的输入为(75,5)。我如何才能使用第一个过滤器。

model = Sequential() 
model.add(Convolution2D(1, 5,5,border_mode='same',input_shape=(1,75, 5)))
model.add(Activation('relu'))
model.add(LSTM(75, return_sequences=False, input_shape=(75, 5)))
model.add(Dropout(0.5))
model.add(Dense(1))
model.compile(loss='mse', optimizer='rmsprop')

这就是出现的错误:

File "/usr/local/lib/python3.4/dist-packages/keras/layers/recurrent.py", line 378, in __init__
super(LSTM, self).__init__(**kwargs)
File "/usr/local/lib/python3.4/dist-packages/keras/layers/recurrent.py", line 97, in __init__
super(Recurrent, self).__init__(**kwargs)
File "/usr/local/lib/python3.4/dist-packages/keras/layers/core.py", line 43, in __init__
self.set_input_shape((None,) + tuple(kwargs['input_shape']))
File "/usr/local/lib/python3.4/dist-packages/keras/layers/core.py", line 138, in set_input_shape
', was provided with input shape ' + str(input_shape))
Exception: Invalid input shape - Layer expects input ndim=3, was provided with input shape (None, 1, 75, 5)

1 个答案:

答案 0 :(得分:5)

您可以在其间添加Reshape()图层以使尺寸兼容。

http://keras.io/layers/core/#reshape

  

keras.layers.core.Reshape(dims)

     

将输出重塑为某种形状。

     

输入形状

     

任意,尽管输入形状中的所有尺寸都必须固定。将此图层用作模型中的第一个图层时,请使用关键字参数input_shape(整数元组,不包括样本轴)。

     

输出形状

     

(batch_size,) + dims

     

<强>参数

     

dims:目标形状。整数元组,不包括样本维度(批量大小)。