我在我自己的数据集上微调caffenet。 我已经在flickr样式数据集上成功完成了它, 所以我修改了solver和train_val原型文件以指向我的数据集,新的输出维度(= 100个类)。
我的数据集大小为1.88M图像用于训练,而.48M图像用于测试。
当我开始训练时,它暂停了一段时间
... blocking_queue.cpp:50] Data layer prefetch queue empty
然后继续如下:
... solver.cpp:414] Test net output #0: accuracy = 0.0002
... solver.cpp:414] Test net output #1: loss = 5.6139 (* 1 = 5.6139 loss)
... solver.cpp:242] Iteration 0, loss = 7.23329
... solver.cpp:258] Train net output #0: loss = 7.23329 (* 1 = 7.23329 loss)
... solver.cpp:571] Iteration 0, lr = 0.001
... solver.cpp:242] Iteration 20, loss = 0
... solver.cpp:258] Train net output #0: loss = 0 (* 1 = 0 loss)
... solver.cpp:571] Iteration 20, lr = 0.001
... solver.cpp:242] Iteration 40, loss = 0
... solver.cpp:258] Train net output #0: loss = 0 (* 1 = 0 loss)
... solver.cpp:571] Iteration 40, lr = 0.001
等等。 显然,根本没有计算任何损失。奇怪的是,迭代0的初始损失似乎很公平。
显然,数据没有正确加载。我使用文本文件列出文件路径及其标签。
我使用softmax损失。
我尝试将初始学习率降低到1/10但没有变化。
**编辑:我已经尝试了1/1000的初始学习率。最初它似乎工作。经过大约300次迭代后,其损失再次迅速下降,准确率达到100%,表明某些事情可能再次出现问题。这些症状同时出现了caffenet和VGG。
知道可能出现什么问题吗?
答案 0 :(得分:1)
问题是培训和测试数据的文本文件没有改组,而是排序。因此,仅对同一类图像进行测试,并且从同一类的图像中学习参数,从而非常快速地获得100%的准确度。