Когда внутри тела метода определен анонимный внутренний класс, все переменные, объявленные окончательными в объеме этого метода, доступны из внутреннего класса. Для скалярных значений после его назначения значение конечной переменной не может измениться. Для значений объекта ссылка не может быть изменена. Это позволяет компилятору Java «захватить» значение переменной во время выполнения и хранить копию как поле во внутреннем классе. Когда внешний метод завершен и его стек стека удален, исходная переменная исчезла, но частная копия внутреннего класса сохраняется в собственной памяти класса.
Давайте рассмотрим один из примеров, приведенных в BVLC / caffe: bvlc_reference_caffenet
. Вы заметите, что на самом деле есть 3 файла '.prototxt'
:
train_val.prototxt
: этот файл описывает сетевую архитектуру для фазы обучения. depoly.prototxt
: этот файл описывает сетевую архитектуру для времени тестирования («развертывание»). solver.prototxt
: этот файл очень мал и содержит «мета-параметры» для обучения. Например, политика скорости обучения , regulariztion и т. Д. Сетевая архитектура, представленная train_val.prototxt
и deploy.prototxt
, должна быть в основном похожи. Существует незначительное различие между двумя:
train_val
обычно содержит явный входной уровень, например слой "HDF5Data"
или "Data"
. С другой стороны, deploy
обычно заранее не знает, какие входные данные он получит, он содержит только оператор: input: "data"
input_shape {
dim: 10
dim: 3
dim: 227
dim: 227
}
, который объявляет, что ожидает сеть, и какими должны быть ее измерения. В качестве альтернативы можно поместить слой "Input"
: layer {
name: "input"
type: "Input"
top: "data"
input_param { shape { dim: 10 dim: 3 dim: 227 dim: 227 } }
}
deploy
. deploy
нет потерь и отсутствия обратного распространения. В кофе вы снабжаете train_val.prototxt
описанием сети, наборами данных поездов / валов и потерей. Кроме того, вы предоставляете solver.prototxt
, описывая мета-параметры для обучения. Выход учебного процесса представляет собой двоичный файл .caffemodel
, содержащий подготовленные параметры сети. После того как сеть была обучена, вы можете использовать deploy.prototxt
с параметрами .caffemodel
для прогнозирования выходов для новых и невидимых входов.
Да, но существуют различные файлы .prototxt, например
https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_train_test.prototxt
это для тренировочной и тестовой сети
для обучения в командной строке ypu может использовать файл решателя, который также является файлом .prototxt, например
https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet_solver.prototxt