machine-learning - 求解器参数 'test_iter' 在测试阶段更改标签值

标签 machine-learning neural-network deep-learning caffe

我正在使用Caffe构建和研究卷积神经网络的框架。

我偶然发现了(我认为是)一个错误。 (我已经在 Github 上报告过。)

这就是问题所在:在测试阶段,标签值会根据 test_iter 的值发生变化。参数(在求解器 .prototxt 文件中定义)。

<小时/>

我正在使用 10240 张图像来训练和测试网络。每个图像有 38 个标签,每个标签可以有两个(0 或 1)值。我使用 HDF5 文件格式将图像数据和标签导入 Caffe;每个文件存储 1024 张图像及其各自的标签。 (我已经检查了 HDF5 文件,一切都正确。)

我使用 9216 个(= 9 个文件)图像进行训练,使用 1024 个图像(= 1 个文件)进行测试。我的 Nvidia 540M 显卡只有 1GB 内存,这意味着我必须批量处理(通常每批 32 或 64 个图像)。

我正在使用以下网络来重现问题:

# in file "BugTest.prototxt"
name: "BugTest"
layer {
    name: "data"
    type: "HDF5Data"
    top: "data"
    top: "label"
    hdf5_data_param {
        source: "./convset_hdf5_train.txt"
        batch_size: 32
    }
    include {
        phase: TRAIN
    }
}
layer {
    name: "data"
    type: "HDF5Data"
    top: "data"
    top: "label"
    hdf5_data_param {
        source: "./convset_hdf5_test.txt"
        batch_size: 32
    }
    include {
        phase: TEST
    }
}
layer {
    name: "silence"
    type: "Silence"
    bottom: "data"
}

该网络仅输出所有标签值。我对此网络使用以下求解器:(大部分是从我的真实网络复制的。)

# In file "BugTest_solver.prototxt"
net: "BugTest.prototxt"
test_iter: 32
test_interval: 200
base_lr: 0.0001
momentum: 0.90
weight_decay: 0.0005
lr_policy: "inv"
gamma: 0.0001
power: 0.75
display: 100
max_iter: 10000
snapshot: 5000
snapshot_prefix: "./bt"
solver_mode: GPU

通过更改 batch_size 得到以下结果和test_iter参数。根据this教程,batch_size测试数据和test_iter求解器中应进行平衡,以确保在测试期间使用所有测试样本。就我而言,我将确保 batch_size * test_iter = 1024 .

这些是我更改值时的结果:
batch_size = 1024, test_iter = 1 : 一切都好。
batch_size = 512, test_iter = 2 :标签从“1”更改为“0.50”。
batch_size = 256, test_iter = 4 :标签“1”更改为“0.50”或“0.25”
batch_size = 128, test_iter = 8 :标签“1”更改为“0.50”或“0.25”或“0.125”
[...]:这种模式仍在继续。

<小时/>

测试过程中发生了什么会影响标签的值?我只是简单地解释 batch_size 的使用吗?和test_iter错了,还是我遗漏了其他东西?

最佳答案

输出日志中显示的结果是迭代的平均值,因此如果您有 2 个迭代标签,则其中一个的平均值为 0.5。

因此,如果批量大小为 1024,则显示 1024 个输出,一切正常。当批量大小为 512 时,仅显示 512 个输出,每个输出是两个标签的平均值,即 i-th 和 i+512- th 标签,很可能标签不共存。

为了验证这一点,您可以安排测试数据,使标签 1 放置在偶数位置,因此当更改批量大小时,标签 1 仍然重合,并且输出应该恰好为 1。

关于machine-learning - 求解器参数 'test_iter' 在测试阶段更改标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30510722/

相关文章:

python - 使用 Keras 回调保存最佳 val_loss

matlab - HOG描述符结果的SVM训练(在Matlab中)

neural-network - 让 ANN 学习识别跳棋游戏中的优势状态?

tensorflow - 值错误: Trying to share variable rnn/multi_rnn_cell/cell_0/basic_lstm_cell/kernel

python - 期望 FloatTensors,但在类似 MNIST 的任务中得到了 LongTensors

python - 将 Caffe 模型与 OpenCV 结合使用

machine-learning - 使用 SSAS 数据挖掘获取测试和训练集的评分结果

python - n 个二元向量的距离度量

python - 使用 Colab GPU 时出错,而使用 CPU 时则没有错误

python - Tensorflow - 可视化预训练网络的学习过滤器