我在微调网络。在特定的情况下,我想用它进行回归,这很有效。在另一种情况下,我想用它来进行分类。HDF5中的咖啡分类标签
对于这两种情况我都有一个带有标签的HDF5文件。通过回归,这只是一个1乘1的numpy数组,其中包含一个浮点数。在将我的EuclideanLoss图层更改为SoftmaxLoss后,我想我可以使用相同的标签进行分类。然而,然后我得到一个负面的损失,因为如此:
Iteration 19200, loss = -118232
Train net output #0: loss = 39.3188 (* 1 = 39.3188 loss)
你能解释是否等等出了什么问题?我确实看到训练损失约为40(这仍然很糟糕),但网络仍然训练?负面的损失只是越来越负面。
UPDATE
读取Shai's commentanswer和后,我已经进行了如下修改:
- 我在我的最后完全连接层6的num_output
,因为我有6个标签(以前是1)。
- 我现在创建一个热载体,传递,作为一个标签到我的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
@Shai num_output当我提出这个问题时是1 – Cassie