Keras双向“ RuntimeError:您必须在使用模型之前对其进行编译。” 编译完成后

Koe*_*oen 3 python-3.x keras

我正在尝试创建一个小的双向递归神经网络。模型本身编译时没有错误,但是在尝试拟合模型时出现错误,指出应该首先编译。请参见下面的代码片段:

# fourth recurrent model, bidirectional
bidirectional_recurrent = Sequential()
bidirectional_recurrent.add(Bidirectional(GRU(32, input_shape=(int(lookback/steps), data_scaled.shape[-1]))))
bidirectional_recurrent.add(Dense(1))

bidirectional_recurrent.compile(optimizer='rmsprop', loss='mae')

bidirectional_recurrent_history = bidirectional_recurrent.fit_generator(train_gen, steps_per_epoch=500, epochs=40,
                                               validation_data=val_gen, validation_steps=val_steps)
Run Code Online (Sandbox Code Playgroud)

RuntimeError:必须先编译模型,然后再使用它。

我使用相同的设置来训练单向RNN,效果很好。任何帮助解决运行时错误的技巧都将受到赞赏。(重新启动内核没有帮助)
也许我没有正确实例化“双向”?

请注意:此问题与在“ X”类型的问题之前需要编译吗?
注2:可以在此处找到相同代码的R示例

Koe*_*oen 6

找到它,
使用双向时,应将其视为一个层,将input_shape移到Bidirectional()而不是GRU()对象中即可解决了该问题

所以

bidirectional_recurrent.add(Bidirectional(GRU(32, input_shape=(int(lookback/steps),
                            data_scaled.shape[-1]))))
Run Code Online (Sandbox Code Playgroud)

变成

bidirectional_recurrent.add(Bidirectional(GRU(32), input_shape=(int(lookback/steps),
                            data_scaled.shape[-1])))
Run Code Online (Sandbox Code Playgroud)