对于Keras中的LSTM和fit_generator,出现错误“使用之前必须先编译模型”

时间:2018-07-03 08:57:26

标签: python keras

我创建了自己的类,该类在其中的一种方法中创建了Keras模型。

self.model = Sequential()
self.model.add(LSTM(32))
self.model.add(Dense(2, activation='relu'))
self.model.compile(optimizer='RMSprop', loss='categorical_crossentropy', metrics=['acc'])

在其他方法中,我尝试使用python生成器作为数据提供程序来训练此模型。

self.model.fit_generator(my_gen(), steps=10, epochs=1, verbose=1)

这会导致错误:

raise RuntimeError('You must compile your model before using it.')
RuntimeError: You must compile your model before using it.

如果我将LSTM层更改为密集层,错误不会上升。我在做什么错了?

具有Tensorflow 1.8.0后端的Keras版本2.2.0。

2 个答案:

答案 0 :(得分:3)

在使用input_shape时,似乎第一个Keras LSTM层仍然需要fit_generator,这在Keras文档中似乎丢失了,并导致“必须在使用模型之前对其进行编译”错误。

要解决此问题,请确保在您的第一个LSTM层中有一个input_shape参数,如下例所示:

model.add(LSTM(100, input_shape=(n_timesteps, n_dimensions), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(100, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(10, activation='tanh'))

model.compile(loss='mse', optimizer='adam')

答案 1 :(得分:0)

我遇到类似的问题。我可以使用以下方法解决它:

self.model.compile(optimizer='RMSprop', loss='categorical_crossentropy', metrics=['acc'])

之前:

self.model.fit_generator(my_gen(), steps=10, epochs=1, verbose=1)

在调用fit_generator()的函数中。