为什么 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
。
我在训练阶段和测试阶段都有一个准确度层。
我还尝试训练 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
。