【发布时间】:2017-04-22 13:34:10
【问题描述】:
我正在微调网络。在特定情况下,我想将其用于回归,这很有效。在另一种情况下,我想将其用于分类。
对于这两种情况,我都有一个带有标签的 HDF5 文件。使用回归,这只是一个包含浮点数的 1×1 numpy 数组。在将 EuclideanLoss 层更改为 SoftmaxLoss 后,我认为可以使用相同的标签进行分类。但是,我得到了一个负损失:
Iteration 19200, loss = -118232
Train net output #0: loss = 39.3188 (* 1 = 39.3188 loss)
你能解释一下,如果出了什么问题?我确实看到训练损失大约是 40(这仍然很糟糕),但是网络仍然训练吗?负损失只会越来越负。
更新
看完Shai's comment和answer后,我做了以下改动:
- 我制作了最后一个全连接层 6 的 num_output,因为我有 6 个标签(以前是 1 个)。
- 我现在创建一个 one-hot 向量并将其作为标签传递到我的 HDF5 数据集中,如下所示
f['label'] = numpy.array([1, 0, 0, 0, 0, 0])
现在尝试运行我的网络返回
Check failed: hdf_blobs_[i]->shape(0) == num (6 vs. 1)
经过网上的一些研究,我将向量重新整形为 1x6 向量。这会导致以下错误:
Check failed: outer_num_ * inner_num_ == bottom[1]->count() (40 vs. 240) Number of labels must match number of predictions; e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), label count (number of labels) must be N*H*W, with integer values in {0, 1, ..., C-1}.
我的想法是为每个数据集(图像)添加 1 个标签,并在我的 train.prototxt 中创建批次。这不应该创建正确的批量大小吗?
【问题讨论】:
-
SoftmaxWithLoss 层之前的层的
num_output是什么? -
@Shai num_output 在我提出这个问题时为 1
标签: neural-network classification deep-learning caffe conv-neural-network