Как использовать TimeDistributed Layer со сверточным слоем? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь построить очень простую проблему с предсказанием угла поворота рулевого колеса. У меня есть видео, снятое со скоростью 30 кадров в секунду, и я преобразовал его в изображения со скоростью около 50000 (то есть примерно 25 минут съемки), и я пытаюсь предсказать цель, которая является углом поворота.

Я пыталсяиспользовать несколько основных сверточных слоев, но MSE, что у меня есть, очень плохо. Итак, я пытаюсь использовать CNN + RNN для улучшения моей модели. Поскольку имеет смысл использовать RNN, потому что мои данные распределены по времени.

Я не знаю, как использовать TimeDistributed Layer вместе с LSTM для этого. Я в основном использую что-то вроде этого ниже, у меня есть каждое изображение формы width, height, channel = (200, 66, 3)

img_height = 66
img_width = 200
channels = 3

input_l = Input(shape=(img_height, img_width, channels))
x = layers.Conv2D(128, kernel_size=(5, 5))(input_l)
x = layers.Conv2D(256, kernel_size=(5, 5))(x)
x = Flatten()(x)
out = Dense(1)(x)
model = Model(inputs=input_l, outputs=out)
model.summary()

Насколько я узнал, что TimeDistributedLayer принимает 4 измерения для работы, но каждое мое изображение имеет форму(200, 66, 3) и как я могу преобразовать каждое мое изображение в четыре измерения. Я не могу понять, как именно это использовать. Я прочитал несколько статей, но ни одна из них не говорила об этом.

Как мне включить распределенный по времени слой вместе с LSTM в эту архитектуру? Может кто-нибудь предоставить пример кода о том, как этого добиться.

1 Ответ

1 голос
/ 30 октября 2019

Слой TimeDistributed предполагает, что измерение 1 является измерением времени (временными шагами), поэтому вам необходимо добавить измерение времени к данным изображения. Что-то вроде:

from keras import layers
from keras import models

time_steps = 10
img_height = 66
img_width = 200
channels = 3

input_l = layers.Input(shape=(time_steps, img_height, img_width, channels))
x = layers.TimeDistributed( layers.Conv2D( 32, kernel_size=(5, 5) ) ) (input_l)
x = layers.TimeDistributed( layers.Conv2D(256, kernel_size=(5, 5)) ) (x)
x = layers.Flatten()(x)
out = layers.Dense(1)(x)
model = models.Model(inputs=input_l, outputs=out)
model.summary()

Надеюсь, это поможет.

...