将LSTM添加到keras中的conv2D层

时间:2018-03-30 15:12:05

标签: python tensorflow keras

我有一个64x60x4的输入形状,用于强化学习代理人玩马里奥。 问题是,它似乎非常“如果屏幕看起来像这样那么做”#34;,这对这个问题并不是很好。

我想在Keras(TensorFlow)中的3个conv2D图层之后添加LSTM图层,但它抱怨它需要5个维度,但是收到4.当我使用图层时,它会变为6和5。

那么如何使用input_shape 64x60x4将LSTM图层放入以下模型中(4是帮助学习对象加速度和方向的最后4帧):

image_input = Input(shape=input_shape)

out = Conv2D(filters=32, kernel_size=8, strides=(4, 4), padding=padding, activation='relu')(image_input)

out = Conv2D(filters=64, kernel_size=4, strides=(2, 2), padding=padding, activation='relu')(out)

out = Conv2D(filters=64, kernel_size=4, strides=(1, 1), padding=padding, activation='relu')(out)

out = MaxPooling2D(pool_size=(2, 2))(out)

out = Flatten()(out)

out = Dense(256, activation='relu')(out)

### LSTM should go here ###

q_value = Dense(num_actions, activation='linear')(out)

欢迎任何其他建议/指示。

1 个答案:

答案 0 :(得分:0)

在您的MaxPooling层之后,我会建议这样的东西

out = Reshape((64, -1))(out)
out = LSTM(...)(out)
out = Flatten...

我也不建议先从32个过滤器开始然后上升,我建议从64个过滤器开始然后下降,但是,嘿,你呢。 我也建议针对不同方面(例如得分,时间等)使用单独的CNN层。除此之外,一切都已设置。