Как мне реализовать трансферное обучение в NiftyNet?
Я хотел бы провести некоторое обучение с использованием стека NiftyNet, так как мой набор помеченных изображений довольно мал. В TensorFlow это возможно - я могу загружать различные предварительно обученные сети и напрямую работать с их слоями. Чтобы точно настроить сеть, я мог бы заморозить обучение промежуточных слоев и обучить только последний слой, или я мог бы просто использовать выходные данные промежуточных слоев в качестве вектора объектов для передачи в другой классификатор.
Как мне это сделать в NiftyNet? Единственное упоминание "передачи обучения" в документации или исходном коде относится к модели зоопарка, но для моей задачи (классификация изображений) в зоопарке нет сетей, доступных. Архитектура ResNet, кажется, реализована и доступна для использования, но, насколько я могу судить, она еще ни на чем не обучена. Кроме того, кажется, что единственный способ обучить сеть - это запустить net_classify train
, используя различные TRAIN
Параметры конфигурации в файле конфигурации, ни один из которых не имеет параметров для замораживания сетей. Различные слои в niftynet.layer
также, кажется, нет вариантов, позволяющих им обучаться или нет.
Я полагаю, у меня есть следующие вопросы:
- Можно ли портировать через предварительно обученную сеть TensorFlow?
- Если я вручную воссоздаю архитектуру слоев в NiftyNet, есть ли способ импортировать веса из предварительно обученной сети TF?
- Как получить доступ к промежуточным весам и слоям модели? ( Как я могу получить доступ к промежуточным картам активации предварительно обученных моделей в NiftyNet? Относится к модельному зоопарку, где их можно получить, используя
net_download
, но не к любой произвольной модели) - Кроме того, кажется, что скорость обучения является постоянной величиной - чтобы изменить это со временем, пришлось бы мне запускать сеть для некоторого количества итераций, изменить
lr
, а затем возобновить обучение с последней контрольной точки?
1 ответ
[Редактировать]: Вот документы для трансферного обучения с NiftyNet.
Эта функция в настоящее время работает. Смотрите здесь для полной информации.
Предполагаемые возможности включают в себя следующее:
- Команда для печати всех обучаемых имен переменных (с необязательным совпадением регулярных выражений)
- Возможность случайной инициализации подмножества переменных, это подмножество создается путем сопоставления имен регулярных выражений
- Возможность восстановления (из существующей контрольной точки) и продолжения обновления подмножества переменных. Если метод оптимизации изменяется, имейте дело с переменными, специфичными для метода (например, импульс)
- Возможность восстановить (из существующей контрольной точки) и заморозить обученные веса для остальных переменных
- Сохранение всех обучаемых переменных после тренировки
- Добавить параметры конфигурации для тонкой настройки, регулярное выражение имени переменной, модульные тесты
- Демо / учебник
- Предварительная обработка контрольных точек для проблем совместимости
- Работа с пакетной нормой и выпадающими слоями (редактирование сетей для удаления переменных пакетной нормы)