Keras 编码器-解码器模型 RuntimeError: You must compile your model before using it

Posted

技术标签:

【中文标题】Keras 编码器-解码器模型 RuntimeError: You must compile your model before using it【英文标题】:Keras encoder-decoder model RuntimeError: You must compile your model before using it 【发布时间】:2019-02-24 01:10:26 【问题描述】:

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

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 时,会引发特定错误。模型的串联有什么问题吗?

【问题讨论】:

【参考方案1】:

你需要调用方法model.compile(loss, optimizer)才能适应它。

【讨论】:

谢谢,我只是没有把整个代码放在那里。我编辑了我的帖子。【参考方案2】:

在 keras 中,有一个概念叫做编译你的模型。

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

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

您的代码抛出错误的原因是模型无法训练,因为您没有使用compile 方法配置损失函数和优化器。只需调用 model.compile() 并选择您选择的损失函数和优化器,然后您就可以训练您的模型了。

【讨论】:

对不起,我没有复制模型编译命令,但是我使用了它但是它没有编译模型。 @mememimis 呵呵,这很奇怪。你确定它被正确编译了吗?否则,我认为它没有理由抛出该错误。这是什么版本的keras?能贴出完整代码吗?

以上是关于Keras 编码器-解码器模型 RuntimeError: You must compile your model before using it的主要内容,如果未能解决你的问题,请参考以下文章

从 Keras 中经过训练的自动编码器模型中获取解码器

keras:将一个模型的输出作为另一个模型的部分输入。

keras中的级联模型(自动编码器+分类器)

Keras 编码器-解码器模型 RuntimeError: You must compile your model before using it

如何使用 sklearn 管道缩放 Keras 自动编码器模型的目标值?

Keras 中带有 LSTM 的多层 Seq2Seq 模型