我已经构建了一个包含2个类的图像分类器,比如说' A'和' B'。我还使用model.save()保存了这个模型。
现在,经过一段时间后,需要增加一个课程' C'。是否可以load_model()然后只将一个类添加到先前保存的模型中,以便我们拥有3个类的最终模型(' A',' B'和' ; C'),无需重新培训整个模型,用于课程' A和' B'再次?
有人可以帮忙吗?
我试过这个:
我使用vgg16作为基础模型并弹出其最后一层,冻结权重并添加一个密集层(DL2),训练它以预测2个类。
然后我在DL2顶部添加了一个更密集的层,称DL3,冻结权重并仅使用C类训练,但现在它始终预测C类。
答案 0 :(得分:0)
我认为您应该查看本教程: https://www.tensorflow.org/tutorials/image_retraining
简而言之: 你不能采用训练有素的模型,并添加新的类。 你应该做一些额外的'微调',可能不会从头开始重新训练模型,但至少要训练分类器(以及一些额外的层)。
答案 1 :(得分:0)
您还可以简单地更改最后一层中的输出类数量,并冻结剩余图层的权重。仅重新调整最后一层的权重。
答案 2 :(得分:0)
只需使用迁移学习,然后创建一个新模型即可。
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