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ǔ)充知識(shí):多分類loss函數(shù)本質(zhì)理解
一、面對(duì)一個(gè)多分類問(wèn)題,如何設(shè)計(jì)合理的損失函數(shù)呢?
1、損失函數(shù)的本質(zhì)在數(shù)學(xué)上稱為目標(biāo)函數(shù);這個(gè)目標(biāo)函數(shù)的目標(biāo)值符合最完美的需求;損失函數(shù)的目標(biāo)值肯定是0,完美分類的損失必然為0 ;
2、損失函數(shù)分為兩部分,一部分為正確的分類,一部分為錯(cuò)誤的分類;保留其中任何一個(gè)部分都可以達(dá)到目標(biāo);就好比兩條路都可以通向羅馬;都可以通過(guò)轉(zhuǎn)化均可以令損失函數(shù)的最小值為0時(shí),為目標(biāo)值;(當(dāng)然最小值不一定要為0 );最關(guān)鍵是最小化方向是通向目標(biāo)值的;
3、多分類問(wèn)題涉及概率問(wèn)題,目標(biāo)函數(shù)中設(shè)計(jì)只保留正確的部分(為什么不保留錯(cuò)誤部分,我想都可以達(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、從逆向的角度而言,錯(cuò)誤部分的前面加個(gè)系數(shù)0,正確部分為1;從簡(jiǎn)單開(kāi)始做起,比如說(shuō)01分類,y*(logPy=1)+(1-y)*(logPy=0); y為樣本真實(shí)分類;這個(gè)就能保存了;y=1時(shí),就保留了第一部分,y=0時(shí)就保留了第二部分;但當(dāng)將01分類擴(kuò)展成三分類甚至多分類時(shí),這種情況就不能夠適應(yīng)了;這是因?yàn)闆](méi)有明白本質(zhì)問(wèn)題;
2、可以將真實(shí)樣本標(biāo)簽輸出轉(zhuǎn)化成概率值;只是正確的概率值為1,其他類別概率為0;這樣就可以完美解決多分類的問(wèn)題;就是說(shuō)每一個(gè)模型輸出類別Log概率前乘以一個(gè)概率值;
這個(gè)公式里面的P值全為1;為0的忽略掉了;
三、如何優(yōu)化呢?
1、模型輸出的概率值轉(zhuǎn)化為一個(gè)h(x)的函數(shù);通過(guò)改變函數(shù)內(nèi)部的w值來(lái)達(dá)到最小值;也許達(dá)不到0值;這個(gè)跟函數(shù)的Power(擬合能力)有關(guān);
四、cross-entropy loss公式怎么寫(xiě)呢?
Y代表樣本的one-hot向量;yhat代表softmax輸出的向量;
以上這篇keras 多任務(wù)多l(xiāng)oss實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python 統(tǒng)計(jì)列表中不同元素的數(shù)量方法
今天小編就為大家分享一篇python 統(tǒng)計(jì)列表中不同元素的數(shù)量方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
跟老齊學(xué)Python之從if開(kāi)始語(yǔ)句的征程
前面做了很多鋪墊了,真正的編程我們還沒(méi)有講過(guò),各位童鞋也許早就不耐煩了,好吧,今天我們就從if語(yǔ)句來(lái)踏上我們的征程2014-09-09
python re庫(kù)的正則表達(dá)式入門(mén)學(xué)習(xí)教程
這篇文章主要給大家介紹了關(guān)于python re庫(kù)的正則表達(dá)式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
基于Python函數(shù)的作用域規(guī)則和閉包(詳解)
下面小編就為大家分享一篇基于Python函數(shù)的作用域規(guī)則和閉包詳解,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11

