2017-02-21 50 views
2

我想在python中使用Keras創建一個神經網絡,使用自定義丟失,並且我正在遊蕩是否有一個sigmoid函數作爲最後一層中的激活函數,並且在自定義丟失的開始處有一個sigmoid是相同的不。因此,這裏是我的意思了:S神經網絡中的S函數的位置是否重要?

enter image description here

我有第二個模型中的損失計算的感覺,但它不通過乙狀結腸同時它是第一款車型回傳播。是對的嗎?

+0

你能否給我們提供一個你正在使用的代碼 - 這實際上很有趣。 –

回答

3

事實上,在第二種情況下反向傳播不經過S形。在損失函數內部修改數據是一件非常糟糕的事情。

這是一個不好的事情要做的原因是因爲,那麼你會在輸出上反向傳播錯誤,而不是網絡正在發生的真正錯誤。

解釋自己用一個簡單的例子: 您以二進制形式有標籤說張[0, 0, 1, 0] 如果你的乙狀結腸是您自定義的損失函數裏面,你可能有一個看起來像這樣[-100, 0, 20, 100],在您的損失乙狀結腸將改變輸出這看起來大致像tihs:[0, 0.5, 1, 1] 將反向傳播的錯誤將是[0, -0.5, 0, -1]。反向傳播將而不是考慮到sigmoid,你會直接將這個錯誤應用到輸出。你可以看到,誤差的大小並不完全反映輸出誤差的大小:最後一個值是100,應該在負值範圍內,但是該模型會在該層反向傳播一個-1的小誤差。

總之,sigmoid必須在網絡中,以便反向傳播在反向傳播錯誤時考慮到它。

+0

令人驚歎!謝謝你的回答,我真的很感激 – DalekSupreme