如何从.caffemodel文件中计算验证损失?

据我所知,有两种方法可以获得验证损失。
(1) 在训练过程中通过设置求解器在线获取,如下所示:train_net: 'train.prototxt'

test_net: "test.prototxt"test_iter: 200test_interval: 100

(2) 基于.caffemodel文件中的权重离线计算。由于GPU资源有限,本问题采用第二种方法。首先,我通过snapshot: 100在每100次迭代后保存网络权重到.caffemodel文件。基于这些.caffemodel文件,我希望计算验证损失

../build/tools/caffe test -model ./test.prototxt -weights $snapshot -iterations 10 -gpu 0 

其中snapshot是.caffemodel文件的文件名。例如snap_network_100.caffemodel

我的测试prototxt文件中的数据层如下

layer {  name: "data"  type: "HDF5Data"  top: "data"  top: "label"  include {    phase: TEST  }  hdf5_data_param {    source: "./list.txt"    batch_size: 8    shuffle: true  }}

第一种和第二种方法给出的验证损失不同。我发现第一种方法的验证损失与批次大小无关。这意味着在不同的批次大小下验证损失是相同的。而第二种方法,验证损失随批次大小变化,但不同迭代下的损失非常接近。

我的问题是,哪种方法计算验证损失是正确的?


回答:

您在计算验证损失时使用了不同的迭代次数:

test_iter: 200

在您的'solver.prototxt'中,与命令行运行时的-iterations 10相比。这意味着您是在不同数量的验证样本上平均计算损失。
由于在命令行验证时使用了远少的样本,您对批次大小更加敏感。
请确保使用完全相同的设置,并验证验证损失确实相同。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注