Добавьте слой LSTM после слоев Conv2D и добавьте некоторые другие входные данные - PullRequest
0 голосов
/ 12 января 2019

Я работаю над гоночной игрой, в которой используется обучение с подкреплением. При обучении модели я сталкиваюсь с проблемой при реализации нейронной сети. Я нашел несколько примеров, которые используют CNN. Но кажется, что добавление дополнительного слоя LSTM повысит эффективность модели. Я нашел следующий пример.

https://team.inria.fr/rits/files/2018/02/ICRA18_EndToEndDriving_CameraReady.pdf

Сеть, которую мне нужно реализовать

Проблема в том, что я не уверен, как мне реализовать здесь слой LSTM. Как я могу дать следующие входные данные для слоя LSTM

  1. Обработанный вывод изображения
  2. текущая скорость
  3. Последнее действие

Вот код, который я сейчас использую. Я хочу добавить слой LSTM после Conv2D.

    self.__nb_actions = 28
    self.__gamma = 0.99

    #Define the model
    activation = 'relu'
    pic_input = Input(shape=(59,255,3))

    img_stack = Conv2D(16, (3, 3), name='convolution0', padding='same', activation=activation, trainable=train_conv_layers)(pic_input)
    img_stack = MaxPooling2D(pool_size=(2,2))(img_stack)
    img_stack = Conv2D(32, (3, 3), activation=activation, padding='same', name='convolution1', trainable=train_conv_layers)(img_stack)
    img_stack = MaxPooling2D(pool_size=(2, 2))(img_stack)
    img_stack = Conv2D(32, (3, 3), activation=activation, padding='same', name='convolution2', trainable=train_conv_layers)(img_stack)
    img_stack = MaxPooling2D(pool_size=(2, 2))(img_stack)
    img_stack = Flatten()(img_stack)
    img_stack = Dropout(0.2)(img_stack)

    img_stack = Dense(128, name='rl_dense', kernel_initializer=random_normal(stddev=0.01))(img_stack)

    img_stack=Dropout(0.2)(img_stack)
    output = Dense(self.__nb_actions, name='rl_output', kernel_initializer=random_normal(stddev=0.01))(img_stack)

    opt = Adam()
    self.__action_model = Model(inputs=[pic_input], outputs=output)

    self.__action_model.compile(optimizer=opt, loss='mean_squared_error')
    self.__action_model.summary()

Спасибо

1 Ответ

0 голосов
/ 13 января 2019

Существуют различные способы сделать это, во-первых, изменить форму вывода conv и передать его в слой lstm. Вот объясненный пример с различным методом Формирование данных для LSTM и подача вывода плотных слоев в LSTM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...