TensorFlow API Slim: Как установить checkpoint_exclude_scopes и output_node_names для VGG-Net 16? - PullRequest
0 голосов
/ 12 марта 2019

В настоящее время я пытаюсь обучить сети классификации с использованием TensorFlow API (https://github.com/tensorflow/models).. После создания записей TFrecords для моего набора данных (сохраненных в Research / Slim / Data) я обучаю сети с помощью следующей команды:

python research/slim/train_image_classifier.py \
--train_dir=research/slim/training/current_model \
--dataset_name=my_dataset \
--dataset_split_name=train \
--dataset_dir=research/slim/data \
--model_name=vgg_16 \
--checkpoint_path=research/slim/training/vgg_16_2016_08_28/vgg_16.ckpt \
--checkpoint_exclude_scopes=vgg_16/fc7,vgg_16/fc8 \
--trainable_scopes=vgg_16/fc7,vgg_16/fc8 \
--batch_size=5 \
--log_every_n_steps=10 \
--max_number_of_steps=1000 \

Это хорошо работает для нескольких сетей классификации (Inception, ResNet, MobileNet), но не очень хорошо для VGG-Net. Я настраиваю следующую модель VGG-Net 16: http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz

В целом, это работает для обучения этой модели, но когда я обучаю сеть, потери увеличиваются, а не уменьшаются. Возможно, это связано с моим выбором 'checkpoint_exclude_scopes'.

Правильно ли использоватьпоследний полностью связанный слой как checkpoint_exclude_scopes?

Тот же вопрос возникает при замораживании графика для параметра 'output_node_names'. Например, для InceptionV3 он работает с 'output_node_names = InceptionV3 / Predictions / Reshape_1'. Но как?чтобы установить этот параметр для VGG-Net. Я попробовал следующее:

python research/slim/freeze_graph.py
--input_graph=research/slim/training/current_model/graph.pb
--input_checkpoint=research/slim/training/current_model/model.ckpt
--input_binary=true 
--output_graph=research/slim/training/current_model/frozen_inference_graph.pb 
--output_node_names=vgg_16/fc8

Я не нашел ни одного слоя, содержащего «Predictions» or «Logits» в модели VGG-Net, поэтому я не уверен.

Спасибо за помощь!

1 Ответ

1 голос
/ 17 апреля 2019

Я попытался запустить train_image_classifier.py, как в вашем скрипте, с некоторыми изменениями, как указано ниже:

  1. Изменены train_dir, dataset_dir и checkpoint_path на мой локальный путь
  2. Поскольку я работал на CPU, в команду
  3. Удален параметр dataset_name=my_dataset, поскольку он выдавал ошибку для меня

Все прошло нормально. Потеря начиналась с 448, а затем медленно уменьшалась и к концу 1000-го шага уменьшалась до 3,5. Он значительно колебался, но тенденция потери была нисходящей. Не уверен, почему вы не смогли увидеть то же самое при попытке запустить.

Что касается вашего вопроса о checkpoint_exclude_scopes во время обучения и output_node_names во время замораживания графика, я думаю, что ваш выбор слоев абсолютно подходит. Однако я бы предпочел тренировать только последний полностью связанный слой (fc8) для более быстрой сходимости.

...