【发布时间】:2017-02-06 23:42:06
【问题描述】:
我正在尝试使用 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 层,将其转换为用于学习图像中对象数量的回归模型。正如许多人所建议的那样。网络的其余部分是相同的。
但是,尽管执行了上述所有操作,但当我运行模型时,我在测试阶段仅收到零作为输出(如下所示)。它没有学到任何东西。但是,每次迭代中训练损失不断减小。
我不明白我犯了什么错误。谁能指导我为什么预测值总是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 格式文件,以便具有浮动标签,即 1.0、2.0、3.0 和 4.0。但是,当我将数据层更改为 HDF5 类型时,我无法像在具有 lmdb 层的 alexnet 中那样裁剪图像以进行数据增强,以及标准化。我将“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"
}
【问题讨论】:
-
您是否对 alexnet 进行了任何更改?
-
@AHA 我添加了一个 euclideonloss 层用于回归目的。并移除了 softmax 层。
-
而且最后的输出也只有 1,因为我对每张图片都有一个值。
-
请发布您网络的最后一层。看起来有些不对劲。
-
@AHA 你现在可以检查一下,我已经通过添加最后一个全连接层和损失层来更新问题。感谢您的快速回复。
标签: machine-learning neural-network regression caffe conv-neural-network