8

我正在研究使用CNN作爲特徵提取器和完全連接的塊進行分類的圖像類增量分類器方法。Keras中的自定義丟失函數

首先,我對VGG每訓練網絡進行了微調以完成一項新任務。一旦網絡接受了新任務的培訓,我就會爲每個班級存儲一些示例,以避免在新班級可用時遺忘。

當有些類可用時,我必須計算包含新類的範例的範例的每個輸出。現在添加零爲老班的輸出,並添加對應於每一個新類的新類輸出我有我的新標籤,即標籤: 如果3個新的類別進入....

老班型輸出: [0.1, 0.05, 0.79, ..., 0 0 0]

新類型輸出:[0.1, 0.09, 0.3, 0.4, ..., 1 0 0] **最後的輸出對應於類。

我的問題是,我可以如何改變一個自定義的損失函數來培訓新的類? ,我想要實現的損失函數被定義爲:

loss function

其中蒸餾損失對應於老的類的輸出以避免遺忘,和分類損失對應於新的類。

如果你能提供我一個代碼樣本來改變keras中的損失函數將是很好的。

謝謝!!!!!

回答

17

您所要做的就是爲此定義一個函數,使用keras後端函數進行計算。該函數必須取真實值和模型預測值。因爲我不確定你的函數中g,q,x和y是什麼,我只是在這裏創建一個基本的例子,而不關心它是什麼意思或者它是否是一個實際有用的函數:

import keras.backend as K 

def customLoss(yTrue,yPred): 
    return K.sum(K.log(yTrue) - K.log(yPred)) 

所有後端功能都可以在這裏看到:https://keras.io/backend/

之後,使用該函數編譯你的模型,而不是一個普通的一種:

model.compile(loss=customLoss, optimizer = .....) 
+0

okaay,這正是IW如尋找,非常感謝你! – Eric

+0

@Daniel你可以檢查這個問題類似於上面,但不能如何實現是如何實現的是https://stackoverflow.com/questions/49088206/w-categorical-crossentropy-function-keras-tensorflow –

相關問題