用新班级重新训练模型

时间:2018-05-16 08:41:57

标签: tensorflow machine-learning keras artificial-intelligence convolutional-neural-network

我已经构建了一个包含2个类的图像分类器,比如说' A'和' B'。我还使用model.save()保存了这个模型。

现在,经过一段时间后,需要增加一个课程' C'。是否可以load_model()然后只将一个类添加到先前保存的模型中,以便我们拥有3个类的最终模型(' A',' B'和' ; C'),无需重新培训整个模型,用于课程' A和' B'再次?

有人可以帮忙吗?

我试过这个:

我使用vgg16作为基础模型并弹出其最后一层,冻结权重并添加一个密集层(DL2),训练它以预测2个类。

然后我在DL2顶部添加了一个更密集的层,称DL3,冻结权重并仅使用C类训练,但现在它始终预测C类。

3 个答案:

答案 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