【问题标题】:Caffe accuracy bigger than 100%Caffe 准确率大于 100%
【发布时间】:2016-02-19 02:26:27
【问题描述】:

我正在构建一个,但是当我使用lenet example 上提供的自定义训练函数且批量大小大于 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

那么,我的代码有什么问题?

【问题讨论】:

    标签: neural-network deep-learning caffe conv-neural-network pycaffe


    【解决方案1】:

    在您的测试代码中,您运行 100 次迭代 (for test_it in range(100)),在每次迭代中,您将 correct 计算为 batch 中正确的示例数。然后将该数字除以 1e4。

    假设您的模型非常好,并且预测率几乎为 100%。然后在 100 次迭代中的每一次批量大小为 32 的情况下,您将向 correct 添加 32,产生 3200。然后将其除以 1e4,最终得到 0.32,这与您看到的几乎一致(您的数字略少,因为有时您的模型确实会错误地预测目标)。

    要修复它,您可以替换

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

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

    【讨论】:

    • 谢谢!你救了我的命=D
    • 这也真的拯救了我的一天!我想知道他们为什么在 LeNet 示例中使用“正确/1e4”。您的代码更好并且可以接受...
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2017-03-21
    • 2017-10-05
    • 2023-03-17
    相关资源
    最近更新 更多