我正在构建一个,但是当我使用上提供的自定义火车功能时莱内特示例 http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/01-learning-lenet.ipynb当批量大小大于 110 时,我的准确率会大于 1 (100%)。
如果我使用批量大小 32,则准确率可达 30%。批量大小等于 64,我的净准确度是 64。批量大小等于 128,准确度是 1.2。
我的图像是 32x32。
训练数据集:56 张中性面孔图像。 60 张惊喜面孔图像。测试数据集: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
那么,我的代码有什么问题吗?
在您的测试代码中,您运行了 100 次迭代(for test_it in range(100)
),在您计算的每次迭代中correct
作为示例的数量batch这是正确的。然后将该数字除以 1e4。
假设您的模型非常好并且预测率几乎为 100%。然后,在每次 100 次迭代中批量大小为 32,您将添加 32correct
,得到 3200。然后将其除以 1e4,得到 0.32,这几乎与您所看到的一致(您的数字稍微少一些,因为有时您的模型确实会错误预测目标)。
要修复它,您可以替换
test_acc[it // test_interval] = correct / 1e4
with
test_acc[it // test_interval] = correct / (100.0 * batch_size)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)