如何将TimeDistributed层与卷积层一起使用?

时间:2019-10-30 19:06:22

标签: python python-3.x tensorflow keras conv-neural-network

我正在尝试建立一个非常基本的自动驾驶汽车转向角预测问题。我大约以30fps的速度拍摄了一段视频,并将其转换为大约50000张(即大约25分钟的镜头)图像,并试图预测目标是转向角。

我尝试使用一些基本的卷积层,但是我得到的MSE非常糟糕。因此,我正在尝试使用CNN + RNN改进我的模型。之所以使用RNN,是因为我的数据是按时间分布的。

我不知道如何将TimeDistributed LayerLSTM一起使用。我基本上在下面使用类似的内容,每个图像的形状为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),如何将每个图像转换成4个维度。我不知道如何确切地使用它。我已经读了几篇文章,但没有人谈论这件事。

如何将时间分布层与LSTM结合到该体系结构中?任何人都可以提供有关如何实现的示例代码。

1 个答案:

答案 0 :(得分:1)

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()

我希望这会有所帮助。