2

我一直在使用caffe一段时间,但取得了一些成功,但我注意到在示例中给出的数据集只有两个方向的分裂,分别为TRAINTEST阶段,其中TEST集似乎充当验证集。Caffe:火车,验证和测试拆分

理想我想有三组,这样,一旦模型被训练,我能救它,测试它在一个完全新的测试集 - 存储在一个单独的完成文件夹lmdb。有没有人有这方面的经验?谢谢。

回答

5

验证和测试之间区分由暗示而没有被装配到测试以任何方式设置超参数可以被调谐到的验证集。 caffe不会优化权重,而且由于测试仅用于评估,因此测试完全按照预期进行。

假设你正在调整求解优化运行之间的超参数。传递给caffe进行测试的lmdb实际上是验证集。如果你已经完成了超参数的调整,并且使用lmdb进行了一次更多的求解器优化,以便进行测试,以保存之前运行中从未使用过的数据。最后一个lmdb是你的测试集。

由于朱古力不优化的超参数,它的测试集是它是什么,测试集。围绕求解器优化调用提出一些python代码,这些代码遍历超参数值是可能的。完成之后,它可以通过一个新的lmdb与不可见的数据交换来告诉你网络对它的普遍适用性。

我不建议修改朱古力一个明确VAL /测试的区别。您甚至不必为解算器和网络定义设置原型文件做任何事情。您可以通过简单地在其他地方移动VAL lmdb和使用shutil.copy(src, dst)

+0

由于它的位置移动测试lmdb做在最后的VAL /测试交换,这是有道理的。我不知道如何使用shutil复制现有的数据库,你是否知道如何将经过培训的caffe模型指向新的数据库?谢谢。 – mjacuse

+0

@ypx,我有一个问题让你更清楚。在MNIST数据集的caffe教程中,“mnist-test-leveldb”实际上是测试数据集或验证数据集? – Saman

+0

Caffe不区分测试和验证。验证集表示您从训练集中排除了一部分数据,但试图通过改变超参数(例如学习速率,更多隐藏节点等)来提高准确性/丢失率。测试集是第三个子集,可以告诉您网络在您选择的最佳超级参数配置方面的表现如何。 – ypx