【问题标题】:Caffe: train, validation and test splitCaffe:训练、验证和测试拆分
【发布时间】:2015-10-02 13:14:55
【问题描述】:

我使用 caffe 已经有一段时间了,并取得了一些成功,但我在示例中注意到,在 TRAINTEST 阶段的数据集上只有两种方式拆分,其中 @ 987654323@ 集似乎充当了验证集。

理想情况下,我希望拥有三组,这样一旦模型训练完毕,我就可以保存它并在一个全新的测试集上对其进行测试 - 存储在一个完整的单独 lmdb 文件夹中。有没有人有这方面的经验?谢谢。

【问题讨论】:

    标签: python machine-learning neural-network caffe conv-neural-network


    【解决方案1】:

    验证和测试之间的区别意味着超参数可以调整到验证集,而没有以任何方式适合测试集。 caffe 只优化权重,因为测试只是为了评估,所以它完全符合预期。

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

    由于 caffe 不优化超参数,它的测试集就是它的本质,一个测试集。围绕迭代超参数值的求解器优化调用可以想出一些 python 代码。完成后,它可以用不可见的数据交换一个新的 lmdb,以告诉您网络使用它的泛化程度。

    我不建议为了明确的 val/test 区别而修改 caffe。您甚至不必为求解器和网络定义设置 prototxt 文件而进行任何详细的操作。您可以在最后进行 val/test 交换,只需将 val lmdb 移动到其他地方并使用 shutil.copy(src, dst) 将测试 lmdb 移动到它的位置即可。

    【讨论】:

    • 谢谢,这是有道理的。我不确定使用shutil复制现有数据库,你知道如何将训练有素的caffe模型指向新数据库吗?谢谢。
    • @ypx,我有一个问题要让你更清楚。在 MNIST 数据集的 caffe 教程中,“mnist-test-leveldb”实际上是测试数据集还是验证数据集?
    • Caffe 不区分测试和验证。验证集意味着您从训练集中排除了一部分数据,但试图通过更改超参数(例如学习率、更多隐藏节点……)来提高准确性/损失。测试集是第三个子集,它告诉你你的网络在你选择的最佳超参数配置上有多好。
    • @ypx:非常感谢。正如你所指出的,我创建了 3 个数据集。 train_lmdb、val_lmdb 和 test_lmdb。我使用 train/val 数据集进行了训练。现在我不知道如何获得测试集的性能。这次我是否需要从训练/测试开始训练并将结果与​​之前的训练进行比较? (这没有意义!)或使用来自训练/验证阶段的预训练模型,然后在新的测试集上进行测试。如果是后者,我该怎么办?
    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 2020-12-15
    • 2018-12-07
    • 2017-04-11
    • 2017-12-26
    • 2021-09-10
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多