Re-train model with new classes

故事扮演 提交于 2019-12-24 01:19:30

问题


I have built an image classifier with 2 classes, say 'A' and 'B'. I have also saved this model, using model.save().

Now, after a certain time, the requirement arose to add one more class 'C'. Is it possible to load_model() and then add only one class to the previously saved model so that we have the final model with 3 classes ('A','B' and 'C'), without having to retrain the whole model, for classes 'A and 'B' again?

Can anyone help?

I have tried this:

I used vgg16 as a base model and pop out its last layer, freeze weights and added one dense layer (DL2), trained it for predicting 2 classes.

Then I added one more dense layer on top of DL2 say DL3, freeze weights and train with class C only but now its always predicting class C.


回答1:


I think you should check this tutorial: https://www.tensorflow.org/tutorials/image_retraining.

In short: You can not take trained model, and add new classes. You should make some additional 'finetuning', may be not retrain the model from scratch, but at least to train classifier (and some additional layers).




回答2:


You can also simply change the number of output classes in the last layer and freeze weights for the remaining layer. Retrain the weights for only the last layer.




回答3:


Just use a transfer learning, and create a new model.

model = VGG16(weights='imagenet',
                  include_top=False,
                  input_shape=(150, 150, 3))

model.pop()

base_model_layers = model.output
pred = Dense(11, activation='softmax')(base_model_layers)
model = Model(inputs=model.input, outputs=pred)

# Freeze the first layers, before train it
for layer in model.layers[:-2]:
    layer.trainable = False


来源:https://stackoverflow.com/questions/50366160/re-train-model-with-new-classes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!