2

Я строю один, но когда я использую пользовательскую функцию поезда, указанную на lenet example с размером партии больше 110, моя точность становится больше 1 (100%).Точность Caffe больше 100%

Если я использую размер партии 32, я получаю 30 процентов точности. Размер партии равен 64. Моя чистая точность равна 64. Размер партии равен 128, точность 1,2.

Мои изображения 32x32. Комплект поездов: 56 изображений Нейтральных лиц. 60 изображений Surprise faces. Набор тестовых данных: 15 изображений нейтральных лиц. 15 изображений Сюрприз лица.

Это мой код:

def train(solver): 

niter = 200 
test_interval = 25 

train_loss = zeros(niter) 
test_acc = zeros(int(np.ceil(niter/test_interval))) 
output = zeros((niter, 32, 2)) 

for it in range(niter): 
    solver.step(1) 
    train_loss[it] = solver.net.blobs['loss'].data 
    solver.test_nets[0].forward(start='conv1') 
    output[it] = solver.test_nets[0].blobs['ip2'].data[:32] 
    if it % test_interval == 0: 
     print 'Iteration', it, 'testing...' 

     correct = 0 

     for test_it in range(100): 
      solver.test_nets[0].forward() 
      correct += sum(solver.test_nets[0].blobs['ip2'].data.argmax(1) == solver.test_nets[0].blobs['label'].data) 

     test_acc[it // test_interval] = correct/1e4 

Итак, что случилось с моим кодом?

ответ

3

В коде тестирования вы запускаете 100 итераций (for test_it in range(100)), на каждой итерации вы вычислить correct как число примеров в партии, которые являются правильными. Затем вы разделите это число на 1e4.

Предположим, что ваша модель очень хорошая и имеет почти 100% -ный коэффициент прогнозирования. Затем с размером партии 32 на каждой из 100 итераций вы добавите 32 к correct, давая 3200. Затем вы разделите его на 1e4, в результате получим 0.32, что почти соответствует тому, что вы видите (ваш номер немного меньше, потому что иногда ваш модель делает неверное предсказание цели).

Чтобы исправить это, вы можете заменить

test_acc[it // test_interval] = correct/1e4 

с

test_acc[it // test_interval] = correct/(100.0 * batch_size) 
+0

Спасибо! Вы спасли мою жизнь = D – Pasdf

+0

Это действительно спасло мой день! Интересно, почему они использовали «правильный/1e4» в примере LeNet. ваш код лучше и приемлемо ... – Cypher

Смежные вопросы