为什么 Caffe 准确度层报告的准确度与 pycaffe 中报告的准确度不同?

Why is the accuracy reported by Caffe accuracy layer differs from the one reported in pycaffe?

我在训练阶段和测试阶段都有一个准确度层。
我还尝试训练 Caffe 形式 PyCaffe 以便我可以更好地绘制曲线。
但是我注意到,使用

返回的准确性
solver.test_nets[0].blobs['accuracy'].data

与我自己计算的不同:

def run_test(solver, test_iter):
    '''
    Tests the network on all test set and calculates the test accuracy
    '''
    correct = 0
    batch_size_test =  solver.test_nets[0].blobs['data'].data.shape[0]

    for test_it in range(test_iter):
        #testing the network on all test set and calculate the test accuracy
        solver.test_nets[0].forward()
        correct += sum(solver.test_nets[0].blobs['ip1'].data.argmax(1) == solver.test_nets[0].blobs['label'].data)

    acc = correct / (test_iter * batch_size_test)
    return acc

run_test returns 的准确性与 Caffe 在控制台屏幕上报告的准确性相同。
这里有什么问题?
我在训练阶段的准确性和损失方面也有这个问题,这又意味着

    train_loss[it] = solver.net.blobs['loss'].data
    training_acc = str(solver.net.blobs['accuracy_training'].data)

与 Caffe 在控制台屏幕中报告的值不同。

我在这里犯了一个严重的错误!。 一切正常,除了我应该只将累积的准确度除以 test_iter 次:

def run_test(solver, test_iter):
    '''
    Tests the network on all test set and calculates the test accuracy
    '''
    correct = 0
    batch_size_test =  solver.test_nets[0].blobs['data'].data.shape[0]

    for test_it in range(test_iter):
        #testing the network on all test set and calculate the test accuracy
        solver.test_nets[0].forward()
        correct += solver.test_nets[0].blobs['accuracy'].data

    acc = correct / test_iter
    return acc 

片段:

solver.test_nets[0].blobs['accuracy'].data

将产生单个批次的准确率,显然为了获得整个测试集的准确率,它们需要累加 test_iter 次,然后除以 test_iter