Reputation: 355
I want to create and train a CNN model in Keras for classification of banknotes. Creating models works fine with simple tutorials but not with the architecture I adopt from this paper.
Keras outputs: RuntimeError('You must compile your model before using it.')
after fit_generator()
is called.
I use the tensorflow backend if that is of relevance.
Model is defined in 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'])
The model
is then used from start_train.py
:
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,
As far as I understood it the process in Keras is as follows:
I tested if model.py
is accessed before calling fit_generator()
and it works properly. I'm out of ideas and wondering what I'm doing wrong especially since the same set-up works fine with a basic model/architecture.
Any help is highly appreciated! :)
Upvotes: 8
Views: 17829
Reputation: 355
Found my mistake - explanation for future reference.
The error origniates back in compile()
where the first if-statement says:
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
So I specified input_shape=
and input_format=
in the first Conv2D
layer and everything works fine.
Upvotes: 12
Reputation: 2309
You can run evaluate on a small set and that would fix it.
Upvotes: 0
Reputation: 36
Try This:
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']))
Upvotes: -1
Reputation: 101
If ever someone ends up with the same error code here is maybe a way to fix it. So I was using a generator and was getting the "Must compile" error even tho everything was fine. I was able to fix it by doing a model.fit(x,y) on a single batch before launching my fit_generator and everything worked fine after that. I don't know if this helps anyone but yeah!
Upvotes: 6