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中的流程如下:
- 定义模型
- 编译模型
- (编译后如果需要evaluate() & summary()可以直接使用)
- 适合模特
- 评估模型。
我测试了在调用 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']))
您可以运行评估一个小集合,这会解决它。
我想在 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中的流程如下:
- 定义模型
- 编译模型
- (编译后如果需要evaluate() & summary()可以直接使用)
- 适合模特
- 评估模型。
我测试了在调用 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']))
您可以运行评估一个小集合,这会解决它。