我正在嘗試建立兩個(gè)神經(jīng)網(wǎng)絡(luò)進(jìn)行分類(lèi)。一個(gè)用于二進(jìn)制,第二個(gè)用于多類(lèi)分類(lèi)。我正在嘗試將torch.nn.CrossEntropyLoss()用作損失函數(shù),但我嘗試訓(xùn)練我的第一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí)出現(xiàn)以下錯(cuò)誤:multi-target not supported at /opt/conda/conda-bld/pytorch_1565272271120/work/aten/src/THNN/generic/ClassNLLCriterion.c:22從我的分析中,我發(fā)現(xiàn)我的數(shù)據(jù)集有兩個(gè)導(dǎo)致錯(cuò)誤的問(wèn)題。我的數(shù)據(jù)集是一個(gè)熱編碼的。我使用一種熱編碼來(lái)預(yù)處理我的數(shù)據(jù)集。第一個(gè)目標(biāo)Y_binary變量具有torch.Size([125973, 1])全 0 和 1 的形狀,表示“否”和“是”類(lèi)。我的數(shù)據(jù)有錯(cuò)誤的維度?我發(fā)現(xiàn)我不能使用帶有交叉熵?fù)p失函數(shù)的簡(jiǎn)單向量。有些人在輸入損失函數(shù)之前使用以下代碼來(lái)重塑他們的目標(biāo)向量。out = out.permute(0, 2, 3, 1).contiguous().view(-1, class_number)但我并沒(méi)有真正理解這段代碼背后的原因。但對(duì)我來(lái)說(shuō),我似乎需要跟蹤以下變量:Class_Number, Batch_size, Dimension_Output. 對(duì)于我的代碼,這里是尺寸X_train.shape: (125973, 122)Y_train2.shape: (125973, 1)batch_size = 64K = len(set(Y_train2)) # Binary classification For multi class classification use K = len(set(Y_train5))目標(biāo)值應(yīng)該是一種熱編碼嗎?如果沒(méi)有,我如何將名義特征提供給損失函數(shù)?如果我使用 reshape 輸出,你能幫我為我的代碼做這個(gè)嗎?我正在嘗試將這個(gè)損失函數(shù)用于我的兩個(gè)神經(jīng)網(wǎng)絡(luò)。先感謝您,
1 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
該錯(cuò)誤是由于使用了torch.nn.CrossEntropyLoss()如果您想預(yù)測(cè) N 個(gè)類(lèi)中的 1 個(gè)類(lèi),可以使用它。對(duì)于多類(lèi)分類(lèi),您應(yīng)該使用torch.nn.BCEWithLogitsLoss()將Sigmoid層和BCELoss 組合在一個(gè)類(lèi)中。
在多類(lèi)的情況下,并且如果您使用 Sigmoid + BCELoss,那么您需要將目標(biāo)設(shè)為 one-hot 編碼,即每個(gè)樣本如下所示:[0 1 0 0 0 1 0 0 1 0]
,其中 1 將位于當(dāng)前類(lèi)的位置。
添加回答
舉報(bào)
0/150
提交
取消