Выполнить проверку потери от.caffemodel?
AFAIK, у нас есть два способа получить потерю проверки.
(1) онлайн во время процесса обучения, установив решатель следующим образом: train_net: 'train.prototxt'
test_net: "test.prototxt"
test_iter: 200
test_interval: 100
(2) в автономном режиме на основе веса в файле.caffemodel. В этом вопросе я отношусь ко второму способу из-за ограниченности графического процессора. Во-первых, я сохранял вес сети в.caffemodel после каждых 100 итераций snapshot: 100
, Основываясь на этих.caffemodel, я хочу рассчитать потери проверки
../build/tools/caffe test -model ./test.prototxt -weights $snapshot -iterations 10 -gpu 0
где snapshot
это имя файла.caffemodel. Например snap_network_100.caffemodel
И уровень данных моего тестового прототипа
layer {
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
include {
phase: TEST
}
hdf5_data_param {
source: "./list.txt"
batch_size: 8
shuffle: true
}
}
Первый и второй способы дают разные проверки достоверности. Я обнаружил, что первый способ проверки потери не зависит от размера партии. Это означает, что потери при проверке одинаковы для разных размеров партии. Хотя, во-вторых, потери при проверке изменились с разным размером пакета, но потеря очень близка с различными итерациями.
Мой вопрос заключается в том, какой путь является правильным для расчета потери проверки?
1 ответ
Вы вычисляете потери проверки для различного числа итераций:
test_iter: 200
В вашем 'solver.prototxt'
, против -iterations 10
при запуске из командной строки. Это означает, что вы усредняете потери по разному количеству проверочных образцов.
Поскольку при проверке из командной строки вы используете гораздо меньше образцов, вы намного более чувствительны к batch_size.
Убедитесь, что вы используете точно такие же настройки и убедитесь, что потери при проверке действительно одинаковы.