Как мне реализовать трансферное обучение в NiftyNet?

Я хотел бы провести некоторое обучение с использованием стека NiftyNet, так как мой набор помеченных изображений довольно мал. В TensorFlow это возможно - я могу загружать различные предварительно обученные сети и напрямую работать с их слоями. Чтобы точно настроить сеть, я мог бы заморозить обучение промежуточных слоев и обучить только последний слой, или я мог бы просто использовать выходные данные промежуточных слоев в качестве вектора объектов для передачи в другой классификатор.

Как мне это сделать в NiftyNet? Единственное упоминание "передачи обучения" в документации или исходном коде относится к модели зоопарка, но для моей задачи (классификация изображений) в зоопарке нет сетей, доступных. Архитектура ResNet, кажется, реализована и доступна для использования, но, насколько я могу судить, она еще ни на чем не обучена. Кроме того, кажется, что единственный способ обучить сеть - это запустить net_classify train, используя различные TRAIN Параметры конфигурации в файле конфигурации, ни один из которых не имеет параметров для замораживания сетей. Различные слои в niftynet.layer также, кажется, нет вариантов, позволяющих им обучаться или нет.

Я полагаю, у меня есть следующие вопросы:

  1. Можно ли портировать через предварительно обученную сеть TensorFlow?
    • Если я вручную воссоздаю архитектуру слоев в NiftyNet, есть ли способ импортировать веса из предварительно обученной сети TF?
  2. Как получить доступ к промежуточным весам и слоям модели? ( Как я могу получить доступ к промежуточным картам активации предварительно обученных моделей в NiftyNet? Относится к модельному зоопарку, где их можно получить, используя net_download, но не к любой произвольной модели)
  3. Кроме того, кажется, что скорость обучения является постоянной величиной - чтобы изменить это со временем, пришлось бы мне запускать сеть для некоторого количества итераций, изменить lr, а затем возобновить обучение с последней контрольной точки?

1 ответ

[Редактировать]: Вот документы для трансферного обучения с NiftyNet.

Эта функция в настоящее время работает. Смотрите здесь для полной информации.

Предполагаемые возможности включают в себя следующее:

  • Команда для печати всех обучаемых имен переменных (с необязательным совпадением регулярных выражений)
  • Возможность случайной инициализации подмножества переменных, это подмножество создается путем сопоставления имен регулярных выражений
  • Возможность восстановления (из существующей контрольной точки) и продолжения обновления подмножества переменных. Если метод оптимизации изменяется, имейте дело с переменными, специфичными для метода (например, импульс)
  • Возможность восстановить (из существующей контрольной точки) и заморозить обученные веса для остальных переменных
  • Сохранение всех обучаемых переменных после тренировки
  • Добавить параметры конфигурации для тонкой настройки, регулярное выражение имени переменной, модульные тесты
  • Демо / учебник
  • Предварительная обработка контрольных точек для проблем совместимости
  • Работа с пакетной нормой и выпадающими слоями (редактирование сетей для удаления переменных пакетной нормы)
Другие вопросы по тегам