Кафе | стратегия установки значений solver.prototxt
На Caffe я пытаюсь реализовать полностью сверточную сеть для семантической сегментации. Мне было интересно, есть ли конкретная стратегия для настройки вашего 'solver.prototxt'
значения для следующих гиперпараметров:
- test_iter
- test_interval
- iter_size
- max_iter
Зависит ли это от количества изображений, которые у вас есть для вашего тренировочного набора? Если так, то как?
1 ответ
Чтобы установить эти значения осмысленным образом, вам нужно иметь еще немного информации о ваших данных:
1. Размер обучающего набора - общее количество обучающих примеров, назовем это количество T
,
2. Размер обучающей партии Количество обучающих примеров, обработанных вместе в одной партии, обычно это задается слоем входных данных в 'train_val.prototxt'
, Например, в этом файле размер партии поезда установлен на 256. Обозначим это количество как tb
,
3. Размер набора валидации - общее количество примеров, отведенных для валидации вашей модели. Обозначим это как V
,
4. Значение размера контрольной партии, установленное в batch_size
для фазы ТЕСТ. В этом примере это установлено на 50. Давайте назовем это vb
,
Теперь, во время обучения, вы хотели бы получать непредвзятую оценку производительности вашей сети время от времени. Для этого вы запускаете свою сеть на проверочном наборе для test_iter
итераций. Чтобы покрыть весь набор проверки, вам нужно иметь test_iter = V/vb
,
Как часто вы хотели бы получить эту оценку? Это действительно зависит от вас. Если у вас очень большой набор проверки и медленная сеть, проверка слишком часто сделает процесс обучения слишком долгим. С другой стороны, недостаточно частая проверка может помешать вам заметить, не сбился ли ваш тренировочный процесс. test_interval
определяет, как часто вы проверяете: обычно для больших сетей вы устанавливаете test_interval
в порядке 5K, для меньших и более быстрых сетей вы можете выбрать более низкие значения. Опять все зависит от вас.
Чтобы покрыть весь тренировочный набор (завершив "эпоху"), вам нужно запустить T/tb
итераций. Обычно один тренируется в течение нескольких эпох, таким образом max_iter=#epochs*T/tb
,
относительно iter_size
: это позволяет усреднять градиенты по нескольким тренировочным мини-партиям, см. эту ветку для получения дополнительной информации.