我已经使用caffe了一段时间,但取得了一些成功,但我已经注意到,在示例中,TRAIN
和TEST
阶段的数据集只有两路分开,TEST
集合似乎充当验证集。
理想情况下,我希望有三套,所以一旦模型被训练,我就可以保存它并在一个全新的测试集上进行测试 - 存储在一个完整的单独的lmdb文件夹中。有没有人有这方面的经验?感谢。
答案 0 :(得分:5)
在验证和测试之间进行区分意味着可以将超参数调整到验证集,而不以任何方式将任何内容拟合到测试集。
caffe
除了权重之外没有优化任何内容,并且由于测试仅用于评估,因此它完全符合预期。
假设您在求解器优化运行之间调整超参数。传递给caffe
进行测试的lmdb实际上是验证集。如果您已完成调整超参数并使用lmdb进行一次求解器优化,以保存以前运行中从未使用过的数据。最后一个lmdb是你的测试集。
由于caffe没有优化超参数,因此它的测试集就是测试集。可以围绕求解器优化调用提出一些python代码,这些代码遍历超参数值。完成之后,它可以用一个看不见的数据交换一个新的lmdb来告诉你网络对它的概括程度。
我不建议修改caffe以获得明确的val / test区别。您甚至不必为设置解算器和网络定义的原型文件而做任何精心设计的事情。您可以在最后执行val / test交换,只需将val lmdb移动到其他位置,然后使用shutil.copy(src, dst)