在Keras中将RNN与CNN一起使用

时间:2020-06-08 23:00:26

标签: tensorflow keras lstm recurrent-neural-network keras-layer

初学者问题

使用Keras,我有一个顺序的CNN模型,该模型根据图像(输入)预测[3 * 1](回归)大小的输出。

如何实现RNN,以便将模型的输出作为第二个输入添加到下一步。 (这样我们就有2个输入:图像和前一个序列的输出)?

str(mtcars['mpg'])
#'data.frame':  32 obs. of  1 variable:
#$ mpg: num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...

str(mtcars$mpg)
#num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...

1 个答案:

答案 0 :(得分:1)

我发现的最简单的方法是直接扩展Model。以下代码将在TF 2.0中运行,但在旧版本中可能无法运行:

class RecurrentModel(Model):
    def __init__(self, num_timesteps, *args, **kwargs):
        self.num_timesteps = num_timesteps
        super().__init__(*args, **kwargs)

    def build(self, input_shape):
        inputs = layers.Input((None, None, input_shape[-1]))
        x = layers.Conv2D(64, (3, 3), activation='relu'))(x)
        x = layers.MaxPooling2D((2, 2))(x)
        x = layers.Flatten()(x)
        x = layers.Dense(3, activation='linear')(x)
        self.model = Model(inputs=[inputs], outputs=[x])

    def call(self, inputs, **kwargs):
        x = inputs
        for i in range(self.num_timestaps):
            x = self.model(x)
        return x
相关问题