2016년 6월 26일 일요일

caffe, Iteration loss vs Train/Test output loss

caffe에 loss를 하나만 output으로 한 경우에도 Iteration의 loss와 Train net output의 loss가 다른 경우가 있다.
예:
I0627 09:46:44.733276 19844 solver.cpp:236] Iteration 3020, loss = -4.39805e+12
I0627 09:46:44.733402 19844 solver.cpp:252]     Train net output #0: loss = 7973.01 (* 1 = 7973.01 loss)
I0627 09:46:44.733418 19844 sgd_solver.cpp:106] Iteration 3020, lr = 0.001

왜그럴까?
<참조: https://groups.google.com/forum/#!topic/caffe-users/WEhQ92s9Vus>
The `net output #k` result is the output of the net for that particular iteration / batch while the `Iteration T, loss = X` output is smoothed across iterations according to the `average_loss` field. Here is the relevant solver code:

즉, net output #k: 의 결과는 해당 iteration의 batch의 결과이고, Iteration T, loss의 결과는 한번의 epoch 정도에 대한 smoothing된 결과로써 Iteration T를 더 믿으면 될 것 같다.