Вы хотели бы объединить предварительно обученные метки модели с собственными метками, или, другими словами, вы дополняете предварительно обученную модель новыми классами.Практический подход заключается в использовании основ трансфертного обучения.
Но позвольте мне сказать вам это, это все еще горячая тема исследования.Проще переучить свои собственные классы, чем добавлять дополнительные классы.Трудно, не невозможно!
Что вы должны делать: Один из способов сделать это - изменить последний слой softmax, чтобы идентифицировать больше классов, чем он предназначен для маркировки. Сетевая хирургия .Вам придется снова обучать модель, и это займет больше времени.
Другой способ - создать новую пользовательскую модель со всеми 1020 метками и обучить ее по всему набору данных, что не очень эффективно, и вы не можетеиспользуйте веса из предварительно обученной модели, и вам придется снова выполнить полное обучение.
Взлом может быть использованием контрольной точки, которая уже предсказывает 1000 классов.Добавьте свои данные для нового класса.Теперь вы должны объединить данные нового класса с набором данных Imagenet, создать TFRecords для всех 1020 классов и тренироваться с контрольной точки сети.
То, что вы пытаетесь сделать, называется " обучение, не забывая ".Пожалуйста, обратитесь к приведенному ниже документу для получения дополнительной информации о том, как реализовать это.
https://arxiv.org/abs/1606.09282
И код Matlab доступен здесь.
https://github.com/lizhitwo/LearningWithoutForgetting
Вы также можете попробовать настроить приведенный ниже файл, чтобы получить желаемый результат.
https://github.com/tensorflow/hub/blob/master/examples/image_retraining/retrain.py
Кроме того, для получения дополнительной информации о переподготовке с использованием моделей с предварительной подготовкой см. Ссылку ниже.
https://www.tensorflow.org/tutorials/images/hub_with_keras
Теперь перейдем к ответу,
Как мы это сделаем:
Перестройте ту же модель с увеличенным количеством наклеек в финалеЗатем на уровне классификации восстанавливаются все веса с начального уровня V3, прошедшего предварительную подготовку, за исключением последнего уровня, и выполняется точная настройка модели.
Для этого необходимо указать два флага:
1. --pretrained_model_checkpoint_path
2. --fine_tune
Код будет выглядеть следующим образом.
# Build the model. Note that we need to make sure the TensorFlow is ready to
# use before this as this command will not build TensorFlow.
cd tensorflow-models/inception
bazel build //inception:custom_train
# Path to the downloaded Inception-v3 model.
MODEL_PATH="${INCEPTION_MODEL_DIR}/inception-v3/model.ckpt-1456935"
# Directory where the data resides.
DATA_DIR=/tmp/custom-data/
# Directory where to save the checkpoint and events files.
TRAIN_DIR=/tmp/custom_train/
# Run the fine-tuning on the flowers data set starting from the pre-trained
# Imagenet-v3 model.
bazel-bin/inception/flowers_train \
--train_dir="${TRAIN_DIR}" \
--data_dir="${DATA_DIR}" \
--pretrained_model_checkpoint_path="${MODEL_PATH}" \
--fine_tune=True \
--initial_learning_rate=0.001 \
--input_queue_memory_factor=1
Для получения дополнительной информации см. Приведенную ниже документацию.
https://github.com/tensorflow/models/tree/master/research/inception