Я хотел бы реализовать архитектуру нейронной сети в Caffe, которая будет работать по-разному на основе некоторой переменной. Например: полная сеть может использовать 10 уровней для 4 из 5 тренировок или тестирования итераций, но для всех других итераций она обрезает сеть и использует только последние 5 слоев. Это потребует, чтобы входной сигнал на первый уровень и вход на 5-й уровень были, конечно, одинаковыми, но мой основной вопрос заключается в том, как реализовать это переключение между двумя архитектурами во время обучения/тестирования.Как создать нестационарную архитектуру сети Caffe?
0
A
ответ
1
Я думаю, вы можете сделать это с помощью pycaffe и caffe.NetSpec()
, но это не будет очень хороший код ...
С другой стороны, почему бы вам не тренироваться i
итераций полной чистой, за исключением моментальный снимок, а затем «теплый старт» уменьшенной модели с сохраненным снимком?
То есть: есть 'full_trainval.prototxt'
с 'full_solver.prototxt'
сконфигурирован для обучения полной сети за i
итераций и 'top_trainval.prototxt'
с 'top_solver.prototxt'
настроен на обучение только верхним слоям сети. Тогда
~$ $CAFFE_ROOT/build/tools/caffe train -solver full_solver.prototxt
Когда этот этап до конца, убедитесь, что вы окончательный sanpshot сохранены, а затем
~$ $CAFFE_ROOT/build/tools/caffe train -solver top_solver.prototxt -snapshot full_train_last_snapshot.solverstate
Наконец, вы можете использовать net_surgery
для объединения весов двух фаз в один полный сеть.