keras 多任務(wù)多l(xiāng)oss實(shí)例
記錄一下:
# Three loss functions category_predict1 = Dense(100, activation='softmax', name='ctg_out_1')( Dropout(0.5)(feature1) ) category_predict2 = Dense(100, activation='softmax', name='ctg_out_2')( Dropout(0.5)(feature2) ) dis = Lambda(eucl_dist, name='square')([feature1, feature2]) judge = Dense(2, activation='softmax', name='bin_out')(dis) model = Model(inputs=[img1, img2], outputs=[category_predict1, category_predict2, judge]) model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss={ 'ctg_out_1': 'categorical_crossentropy', 'ctg_out_2': 'categorical_crossentropy', 'bin_out': 'categorical_crossentropy'}, loss_weights={ 'ctg_out_1': 1., 'ctg_out_2': 1., 'bin_out': 0.5 }, metrics=['accuracy'])
補(bǔ)充知識:多分類loss函數(shù)本質(zhì)理解
一、面對一個多分類問題,如何設(shè)計(jì)合理的損失函數(shù)呢?
1、損失函數(shù)的本質(zhì)在數(shù)學(xué)上稱為目標(biāo)函數(shù);這個目標(biāo)函數(shù)的目標(biāo)值符合最完美的需求;損失函數(shù)的目標(biāo)值肯定是0,完美分類的損失必然為0 ;
2、損失函數(shù)分為兩部分,一部分為正確的分類,一部分為錯誤的分類;保留其中任何一個部分都可以達(dá)到目標(biāo);就好比兩條路都可以通向羅馬;都可以通過轉(zhuǎn)化均可以令損失函數(shù)的最小值為0時,為目標(biāo)值;(當(dāng)然最小值不一定要為0 );最關(guān)鍵是最小化方向是通向目標(biāo)值的;
3、多分類問題涉及概率問題,目標(biāo)函數(shù)中設(shè)計(jì)只保留正確的部分(為什么不保留錯誤部分,我想都可以達(dá)到目的,這里保留正確部分,計(jì)算更方便);用極值思維想象完美分類情況下,輸出的正確類別的概率必然是1,所以損失函數(shù)loss=-1/n(Px1+Px2+Px3+……);Px1代表樣本x為x1的情況下,輸出樣本類別相同的概率;最好的情況就是p值都為1;損失值為0 ,可loss函數(shù)為-1;如何設(shè)計(jì)才能等效呢?答案就是加log函數(shù);Loss=-1/n(logPx1+logPx2+logPx3+……);目標(biāo)函數(shù)最小值就是0;
二、 如何在損失函數(shù)中只保留正確的部分呢?
1、從逆向的角度而言,錯誤部分的前面加個系數(shù)0,正確部分為1;從簡單開始做起,比如說01分類,y*(logPy=1)+(1-y)*(logPy=0); y為樣本真實(shí)分類;這個就能保存了;y=1時,就保留了第一部分,y=0時就保留了第二部分;但當(dāng)將01分類擴(kuò)展成三分類甚至多分類時,這種情況就不能夠適應(yīng)了;這是因?yàn)闆]有明白本質(zhì)問題;
2、可以將真實(shí)樣本標(biāo)簽輸出轉(zhuǎn)化成概率值;只是正確的概率值為1,其他類別概率為0;這樣就可以完美解決多分類的問題;就是說每一個模型輸出類別Log概率前乘以一個概率值; 這個公式里面的P值全為1;為0的忽略掉了;
三、如何優(yōu)化呢?
1、模型輸出的概率值轉(zhuǎn)化為一個h(x)的函數(shù);通過改變函數(shù)內(nèi)部的w值來達(dá)到最小值;也許達(dá)不到0值;這個跟函數(shù)的Power(擬合能力)有關(guān);
四、cross-entropy loss公式怎么寫呢?
Y代表樣本的one-hot向量;yhat代表softmax輸出的向量;
以上這篇keras 多任務(wù)多l(xiāng)oss實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Win10系統(tǒng)下安裝labelme及json文件批量轉(zhuǎn)化方法
這篇文章主要介紹了Win10系統(tǒng)下安裝labelme及json文件批量轉(zhuǎn)化的方法,文中較詳細(xì)的給大家介紹了安裝過程 ,需要的朋友可以參考下2019-07-07python 實(shí)現(xiàn)一次性在文件中寫入多行的方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)一次性在文件中寫入多行的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01pycharm 取消默認(rèn)的右擊運(yùn)行unittest的方法
今天小編就為大家分享一篇pycharm 取消默認(rèn)的右擊運(yùn)行unittest的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11Django點(diǎn)贊的實(shí)現(xiàn)示例
本文主要介紹了Django點(diǎn)贊的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03