我在微調網絡。在特定的情況下,我想用它進行迴歸,這很有效。在另一種情況下,我想用它來進行分類。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