Keras:"must compile model before using it" 尽管使用了 compile()

Keras: "must compile model before using it" despite compile() is used

我想在 Keras 中创建和训练一个 CNN 模型来对钞票进行分类。使用简单的教程可以很好地创建模型,但不适用于我从这个 paper 中采用的架构。 Keras 输出: RuntimeError('You must compile your model before using it.') 在调用 fit_generator() 之后。

如果相关,我会使用 tensorflow 后端。


模型定义在model.py:

from keras.layers import ...
model = Sequential() 
model.add(some_layer)

... #according to the paper

model.add(some_layer)
model.add(Dense(#output_classes, activation='softmax') #last layer

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

然后从start_train.py使用model

from model import model as m

#some ImageGenerator stuff as input

m.fit_generator( #training on train_data
        train_pics,
        steps_per_epoch=#steps,
        epochs=#epochs,
        validation_data=test_pics,

据我了解在Keras中的流程如下:

  1. 定义模型
  2. 编译模型
  3. (编译后如果需要evaluate() & summary()可以直接使用)
  4. 适合模特
  5. 评估模型。

我测试了在调用 fit_generator() 之前是否访问了 model.py 并且它工作正常。我没有想法,想知道我做错了什么,特别是因为相同的设置在基本 model/architecture.

下工作正常

非常感谢任何帮助! :)

发现我的错误-解释以备将来参考。

错误起源于 compile(),其中第一个 if 语句说:

if not self.built:
    # Model is not compilable because
    # it does not know its number of inputs
    # and outputs, nor their shapes and names.
    # We will compile after the first
    # time the model gets called on training data.
return

所以我在第一个 Conv2D 层中指定了 input_shape=input_format=,一切正常。

如果有人遇到相同的错误代码,这里可能是一种修复方法。所以我正在使用一个生成器,即使一切都很好,也会收到 "Must compile" 错误。在启动我的 fit_generator 之前,我可以通过在单个批次上执行 model.fit(x,y) 来修复它,之后一切正常。我不知道这是否对任何人有帮助,但是是的!

试试这个:

from keras.optimizers import Adam
opt = keras.optimizers.Adam(use your own learning rate)
model.compile(optimizer=opt, loss="categorical_crossentropy", metrics=model.compile(optimizer=opt, loss="categorical_crossentropy", metrics=['accuracy']))

您可以运行评估一个小集合,这会解决它。