Python keras如何将卷积层转换为lstm层后的输入大小

Posted

技术标签:

【中文标题】Python keras如何将卷积层转换为lstm层后的输入大小【英文标题】:Python keras how to change the size of input after convolution layer into lstm layer 【发布时间】:2016-05-17 04:48:32 【问题描述】:

我对卷积层和lstm层之间的连接有问题。数据的形状为 (75,5),其中每个时间步有 75 个时间步 x 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】:

您可以在两者之间添加 Reshape() 层以使尺寸兼容。

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

keras.layers.core.Reshape(dims)

将输出重塑为特定形状。

输入形状

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

输出形状

(batch_size,) + dims

参数

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

【讨论】:

您能否给出他的示例的确切尺寸?

以上是关于Python keras如何将卷积层转换为lstm层后的输入大小的主要内容,如果未能解决你的问题,请参考以下文章

将 Pytorch LSTM 的状态参数转换为 Keras LSTM

用Keras生成面部Python实现

如何在 Keras 的两个 LSTM 层之间添加注意力层

keras---cnn---rnn---lstm

如何将 keras LSTM 层的输出输入到输入层?

如何在 keras 中拥有并行卷积层?