Keras编码器-解码器模型RuntimeError:使用模型之前,必须先对其进行编译

时间:2018-09-19 19:28:08

标签: python keras encoder-decoder

我正在尝试重现图像字幕模型的结果,但出现此错误。这两个模型的代码如下:

image_model = Sequential()
image_model.add(Dense(EMBEDDING_DIM, input_dim=4096, activation='relu'))
image_model.add(RepeatVector(self.max_length))

lang_model = Sequential()
lang_model.add(Embedding(self.vocab_size, 256, input_length=self.max_length))
lang_model.add(LSTM(256, return_sequences=True))
lang_model.add(TimeDistributed(Dense(EMBEDDING_DIM)))

model = Sequential()
model.add(Concatenate([image_model, lang_model]))
model.add(LSTM(1000, return_sequences=False))
model.add(Dense(self.vocab_size))
model.add(Activation('softmax'))

print ("Model created!")
model.compile(loss='categorical_crossentropy', 
optimizer='rmsprop', metrics=['accuracy'])

然后通过以下代码调用该模型:

sd = SceneDesc.scenedesc()
model = sd.create_model()
batch_size = 512
model.fit_generator(sd.data_process(batch_size=batch_size), 
    steps_per_epoch=sd.no_samples/batch_size, epochs=epoch, verbose=2, 
    callbacks=None)

但是,当调用fit_generator时,会引发特定错误。模型的串联有什么问题吗?

2 个答案:

答案 0 :(得分:2)

在keras中,有一个概念称为编译模型。

基本上,这将配置损失函数并为要训练的模型设置优化器。

例如,model.compile(loss='mse',optimizer='Adam')将配置模型以使用mse损失函数并使用Adam优化算法。您使用的替代方法在很大程度上取决于问题的类型。

您的代码引发错误的原因是因为模型尚未训练,因为您尚未使用compile方法配置损失函数和优化器。您只需选择损失函数和优化器即可调用model.compile(),然后就可以训练模型。

答案 1 :(得分:0)

您需要先调用方法model.compile(loss, optimizer),然后才能使用它。