keras多工多loss回傳的思考

2021-09-05 01:28:53 字數 1334 閱讀 1352

如果有乙個多工多loss的網路,那麼在訓練時,loss是如何工作的呢?

比如下面:

model = model(inputs =

input

, outputs =

[y1, y2]

)l1 =

0.5l2 =

0.3model.

compile

(loss =

[loss1, loss2]

, loss_weights=

[l1, l2],...)

其實我們最終得到的loss為

final_loss = l1 * loss1 + l2 * loss2
我們最終的優化效果是最小化final_loss。

問題來了,在訓練過程中,是否loss2只更新得到y2的網路通路,還是loss2會更新所有的網路層呢?

此問題的關鍵在梯度回傳上,即反向傳播演算法。

對於x1引數的更新:

∂ fi

nall

oss∂

x1=l

1∗∂l

oss1

∂x1+

l2∗∂

loss

2∂x2

\frac=\frac + \frac

∂x1∂fi

nall

oss​

=∂x1

l1∗∂

loss

1​+∂

x2l2

∗∂lo

ss2​

對於x2引數的更新:

∂ fi

nall

oss∂

x2=l

2∗∂l

oss2

∂x2\frac= \frac

∂x2∂fi

nall

oss​

=∂x2

l2∗∂

loss

2​對於x2引數的更新:

∂ fi

nall

oss∂

x1=l

1∗∂l

oss1

∂x1\frac= \frac

∂x1∂fi

nall

oss​

=∂x1

l1∗∂

loss

1​所以loss1只對x1和x2有影響,而loss2只對x1和x3有影響。

參考:

QT 多目錄多工程 配置

因為專案中我們需要把模組分的比較明確,這樣既方便大家分工合作,也方便日後模組重複使用。昨天初次摸索了一下,碰到了bug。解決了後,決定把這種開發方式和大家分享一下。新建工程時,我們選擇 other project subdirs project 這個工程即建立乙個完整的父工程,在父工程下包含很多子工...

多工 同步

實現多工之間通訊的最簡便的辦法是使用共享的資料結構。雖然共享資料區簡化了任務間的通訊,但是必須保證 每個任務在處理共享資料時的排他性。以避免競爭和資料破壞。共享資源滿足互斥性的一般方法有 1.關中斷,開中斷 2.使用測試並置位指令 3.禁止做任務切換 4.利用訊號量 一.關中斷 開中斷 這估計是最簡...

多工學習

最近一段時間multitask網路比較流行,比如做人臉檢測的時候,乙個網路完成 人臉和非人臉 二分類任務的同時也要進行boudingbox回歸或者人臉關鍵點回歸。以人臉檢測mtcnn為例,乙個網路包含三個任務。訓練的時候,乙個batch中的,一部分用於二分類 一部分用於boundingbox 回歸,...