我正在嘗試培訓CNN按主題對文本進行分類。當我使用二進制交叉熵時,我得到~80%的準確度,使用分類交叉熵我得到~50%的準確度。我不明白為什么會這樣。這是一個多類問題,這是不是意味著我必須使用分類交叉熵,而二元交叉熵的結果是沒有意義的?model.add(embedding_layer)model.add(Dropout(0.25))# convolution layersmodel.add(Conv1D(nb_filter=32, filter_length=4, border_mode='valid', activation='relu'))model.add(MaxPooling1D(pool_length=2))# dense layersmodel.add(Flatten())model.add(Dense(256))model.add(Dropout(0.25))model.add(Activation('relu'))# output layermodel.add(Dense(len(class_id_index)))model.add(Activation('softmax'))然后我使用它categorical_crossentropy作為損失函數(shù)編譯它:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])要么model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
3 回答

翻過高山走不出你
TA貢獻1875條經(jīng)驗 獲得超3個贊
這一切都取決于您正在處理的分類問題的類型。主要有三類;
二元分類(兩個目標類)
多級分類(超過兩個獨家目標)
多標簽分類(超過兩個非獨占目標),其中多個目標類可以同時打開
在第一種情況下,應該使用二進制交叉熵,并且應該將目標編碼為單熱矢量。
在第二種情況下,應該使用分類交叉熵,并且應該將目標編碼為單熱矢量。
在最后一種情況下,應該使用二進制交叉熵,并且應該將目標編碼為單熱矢量。每個輸出神經(jīng)元(或單位)被視為一個單獨的隨機二進制變量,整個輸出向量的損失是單個二進制變量丟失的乘積。因此,它是每個單個輸出單元的二元交叉熵的乘積。
二元交叉熵定義如下: 二元交叉熵 和分類交叉熵定義如下: 分類交叉熵

慕虎7371278
TA貢獻1802條經(jīng)驗 獲得超4個贊
我遇到了一個“倒置”的問題 - 我使用categorical_crossentropy(有2個類)并且使用binary_crossentropy很差。似乎問題是錯誤的激活功能。正確的設置是:
for
binary_crossentropy
:sigmoid激活,標量目標for
categorical_crossentropy
:softmax激活,單熱編碼目標
- 3 回答
- 0 關注
- 3087 瀏覽
添加回答
舉報
0/150
提交
取消