gpt4 book ai didi

machine-learning - 在 caffe 中测试回归网络

转载 作者:行者123 更新时间:2023-11-30 09:29:24 25 4
gpt4 key购买 nike

我正在尝试使用 Alexnet 对图像中的对象进行计数。

我当前的图像每个图像包含 1、2、3 或 4 个对象。对于初始检查,我每类有 10 张图像。例如,在训练集中我有:

image  label
image1 1
image2 1
image3 1
...
image39 4
image40 4

我使用 imagenet create 脚本为此数据集创建 lmdb 文件。这成功地将我的图像集转换为 lmdb。例如,Alexnet 通过引入 EucledeanLosslayer 而不是 Softmax Layer 转换为回归模型,用于学习图像中的对象数量。正如许多人建议的那样。网络的其余部分是相同的。

但是,尽管执行了上述所有操作,当我运行模型时,我在测试阶段仅收到零作为输出(如下所示)。它没有学到任何东西。然而,训练损失在每次迭代中不断下降。

我不明白我犯了什么错误。谁能告诉我为什么预测值总是0?如何在测试阶段检查回归值,以便检查有多少样本是正确的以及每个图像的值是多少?

测试数据集的预测标签和实际标签如下:

I0928 17:52:45.585160 18302 solver.cpp:243] Iteration 1880, loss = 0.60498
I0928 17:52:45.585212 18302 solver.cpp:259] Train net output #0: loss = 0.60498 (* 1 = 0.60498 loss)
I0928 17:52:45.585225 18302 solver.cpp:592] Iteration 1880, lr = 1e-06
I0928 17:52:48.397922 18302 solver.cpp:347] Iteration 1900, Testing net (#0)
I0928 17:52:48.499543 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 1
I0928 17:52:48.499641 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 2
I0928 17:52:48.499660 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 3
I0928 17:52:48.499681 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 4
...

注意:我还创建了 hdf5 格式文件以便具有 float 标签,即 1.0、2.0、3.0 和 4.0。但是,当我将数据层更改为 HDF5 类型时,我无法像在 alexnet 中使用 lmdb 层那样裁剪图像以进行数据增强以及标准化。我使用“https://github.com/nikogamulin/caffe-utils/blob/master/hdf5/demo.m”上给出的脚本来处理 hdf5 数据,并按照他的步骤在我的模型中使用它。

我已经更新了最后一层:

layer {
name: "fc8reg"
type: "InnerProduct"
bottom: "fc7"
top: "fc8reg"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 1
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "accuracy"
type: "Accuracy"
bottom: "fc8reg"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
layer {
name: "loss"
type: "EuclideanLoss"
bottom: "fc8reg"
bottom: "label"
top: "loss"
}

最佳答案

在不判断您的网络是否发散的情况下,您所犯的明显错误是您不应该使用Accuracy层来测试回归网络。它仅用于测试由 SoftmaxWithLoss 层训练的分类网络。

事实上,给定一个网络图像,网络中的Accuracy层将始终对其输入数组进行排序(这里是bottom:“fc8reg”)并且默认选择数组中最大值的索引作为预测标签。

由于 fc8reg 层中的 num_output == 1accuracy 层将始终预测输入图像的索引 0 作为其预测标签见过。

最后,您可以使用 EuclideanLoss 层来测试您的回归网络。这个similar problem也可能会给你一些提示。

<小时/>

如果您要在训练后打印并计算回归值,并计算回归网络的准确性,您可以简单地编写一个 RegressionAccuracy 层,如 this .

或者,如果您的目标标签只有 4 个离散值 {1,2,3,4},您仍然可以为您的任务训练分类网络。

关于machine-learning - 在 caffe 中测试回归网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com