Caffe определяет дополнительный уровень данных для классификации [duplicate]

Когда внутри тела метода определен анонимный внутренний класс, все переменные, объявленные окончательными в объеме этого метода, доступны из внутреннего класса. Для скалярных значений после его назначения значение конечной переменной не может измениться. Для значений объекта ссылка не может быть изменена. Это позволяет компилятору Java «захватить» значение переменной во время выполнения и хранить копию как поле во внутреннем классе. Когда внешний метод завершен и его стек стека удален, исходная переменная исчезла, но частная копия внутреннего класса сохраняется в собственной памяти класса.

( http: //en.wikipedia .org / вики / Final_% 28Java% 29 )

7
задан Shai 24 January 2016 в 08:48
поделиться

2 ответа

Давайте рассмотрим один из примеров, приведенных в 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 для прогнозирования выходов для новых и невидимых входов.

12
ответ дан Shai 21 August 2018 в 23:32
поделиться
  • 1
    спасибо, много Шай. Это потрясающий ответ. Не мог бы попросить лучшего объяснения. – Alejandro Simkievich 24 January 2016 в 13:48

Да, но существуют различные файлы .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

0
ответ дан Birol Kuyumcu 21 August 2018 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: