Переучите модель новыми классами - PullRequest
0 голосов
/ 16 мая 2018

Я построил классификатор изображений с двумя классами, скажем, «A» и «B».Я также сохранил эту модель, используя model.save ().

Теперь, через некоторое время, возникло требование добавить еще один класс 'C'.Можно ли загрузить load_model () и затем добавить только один класс к ранее сохраненной модели, чтобы у нас была окончательная модель с 3 классами («A», «B» и «C»), без необходимости переучивать всю модель,для классов 'A и' B снова?

Кто-нибудь может помочь?

Я пробовал это:

Я использовал vgg16 в качестве базовой модели и выскочил ее последний слой, заморозить веса и добавить один плотный слой (DL2), обучил его прогнозированию 2 классов.

Затем я добавил еще один плотный слой поверх DL2, скажем, DL3, замораживаю веса и тренируюсь только с классом C, но теперь он всегда предсказывает класс C.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Вы также можете просто изменить количество выходных классов в последнем слое и зафиксировать веса для оставшегося слоя. Восстановите веса только для последнего слоя.

0 голосов
/ 31 октября 2018

Просто используйте трансферное обучение и создайте новую модель.

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
0 голосов
/ 16 мая 2018

Я думаю, вы должны проверить этот урок: https://www.tensorflow.org/tutorials/image_retraining.

Короче говоря: Нельзя брать обученную модель и добавлять новые занятия. Вы должны сделать некоторые дополнительные «тонкие настройки», возможно, не переобучать модель с нуля, а хотя бы обучить классификатор (и некоторые дополнительные слои).

...