Могу ли я снова загружать и обучать модель Keras с новыми целями?

#python #tensorflow #keras #neural-network #facial-identification

#python #тензорный поток #keras #нейронная сеть #идентификация лица

Вопрос:

Я знаю, что после обучения модели нейронной сети я мог бы сохранить ее и в будущем загружать модель для повторного обучения. Однако, что, если я хотел бы включить новые цели в модель для обучения?

Например, я создаю модель распознавания лиц для сотрудников моей компании. Когда в мою компанию приходят новые сотрудники, могу ли я загружать и обучать существующую модель с новыми целями без необходимости заново обучать весь набор данных?

Я подумал об инициализации вектора keras.utils.to_categorical, который расширяет другой вектор numpy.zeroes поэлементно для будущего целевого обучения. Могу ли я узнать, правильный ли этот подход?

Комментарии:

1. Вам нужно будет как-то избежать катастрофического забывания. Смотрите Этот ответ на сайте AI stack exchange для получения дополнительной информации.

2. Вы правы. Я протестировал эту парадигму, и я не смог снова обучить загруженную модель чисто новым целям, не столкнувшись с катастрофическим забыванием. Единственный способ обойти это — обучить загруженную модель всем целям. Есть ли у вас какой-нибудь способ обойти катастрофическое забывание? Есть ли какие-либо активные исследования по этому вопросу?

Ответ №1:

Да, вы можете. Например, модель VGG-Face имеет 2622 выходных данных. Эти выходные данные используются для поиска лицевых вложений. Мы можем удалить некоторые ее последние слои и изменить количество выходных данных. Например, я добавил 101 слой, но базовая модель имеет 2622 выходных данных. Это новые цели, и я могу начать обучение.

 #!pip install deepface
from deepface import DeepFace
base_model = DeepFace.build_model("VGG-Face")

second_model = Convolution2D(101, (1, 1), name='predictions')(base_model.layers[-4].output)
second_model = Flatten()(second_model)
second_model = Activation('softmax')(second_model)

from tensorflow.keras.models import Model
new_model = Model(inputs=base_model.input, outputs=second_model)

new_model.fit(train_x, train_y, epochs=5000, validation_data=(test_x, test_y))
 

Комментарии:

1. Сможете ли вы использовать недавно обученную модель для исходных 2622 целей и 101 новой цели?

2. Недавно обученная модель теперь имеет 101 цель. Вы больше не можете запускать ее для 2622 целей.

3. ХОРОШО, это то, что я подумал. Мое впечатление от вопроса OP о том, что они хотели обновить модель новыми данными без необходимости тренироваться на всех предыдущих данных. Не уверен, что моя интерпретация верна.

4. На самом деле, вы можете заморозить / заблокировать веса ранних слоев и переобучить новую модель с вашими новыми данными. Таким образом, вы также можете получить результаты и изучить предыдущую модель. Таким образом, вам следует повторно обучить новую модель с меньшим размером данных.