【问题标题】:Testing a network without setting number of iterations在不设置迭代次数的情况下测试网络
【发布时间】:2016-09-24 01:31:05
【问题描述】:

我有一个预训练的网络,我想用它来测试我的数据。我使用 .prototxt 定义了网络架构,我的数据层是一个自定义 Python 层,它接收带有我的数据路径及其标签的 .txt 文件,对其进行预处理,然后馈送到网络。

在网络的末端,我有一个自定义 Python 层,它获取网络和标签(来自第一层)所做的类预测并打印,例如,关于所有批次的准确度。

我想运行网络,直到所有示例都通过网络。

但是,在搜索测试网络的命令时,I've found

caffe test -model architecture.prototxt -weights model.caffemodel -gpu 0 -iterations 100

如果我不设置 -iterations,它使用默认值 (50)。

你们中有人知道不设置迭代次数即可运行 caffe 测试的方法吗?

非常感谢您的帮助!

【问题讨论】:

  • “不设置迭代次数”是指迭代次数等于1吗?实际上,您可以将iterations 设置为一个数字n 以确保n*batch_size == TOTAL_NUM,其中TOTAL_NUM 是所有样本的数量。如果你的内存足够大,你可以设置iterations = 1, batch_size = TOTAL_NUM一次传遍所有的例子。
  • 是的,我现在的做法是找出n,即TOTAL_NUM / batch_size 并运行caffe test,将n 作为参数传递。但是假设我更改了TOTAL_NUM(例如,通过增加我的数据集)......我希望有一种方法可以运行caffe test,而无需事先确定n
  • 也许您可以在启动caffe test 的脚本(.bat.sh)中编写一些代码来预先计算n

标签: deep-learning caffe


【解决方案1】:

不,Caffe 没有工具来检测它已经运行了一个 epoch(每个输入向量只使用一次)。您可以编写一个验证输入例程来执行此操作,但 Caffe 希望您提供数量。这样,您可以为各种验证数据集轻松生成可比较的结果。不过,我同意这将是一个方便的功能。

缺少此功能可能与缺少培训和插页式测试有关。 在训练中,我们调整超参数以获得最准确的模型对于给定的应用程序。事实证明,这更依赖于 TOTAL_NUM 而不是 epoch 的数量(给定足够大的训练集)。

对于固定的训练集,我们经常将准确率(y 轴)与历元(x 轴)进行对比,因为当我们调整批量大小时,这会产生易于处理的结果。但是,如果我们将训练集的大小减半,最具可比性的图将在 TOTAL_NUM 而不是 epoch 数上进行缩放。

此外,通过限制测试集的大小,我们可以避免在训练期间长时间等待反馈。例如,在针对 ImageNet 数据集(1.2M 图像)进行训练时,我通常使用大约 1000 张图像进行测试,通常每个 epoch 不超过 5 次。

【讨论】:

  • 是的,但我指的是测试阶段。我已经对模型进行了训练,但我想只运行一个 epoch,而无需在每次测试数据集更改时定义迭代次数。
  • 啊...这是相同的响应,恐怕,但我会编辑我的答案以匹配您的问题。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 2011-05-27
  • 2020-10-14
相关资源
最近更新 更多