簡體   English   中英

在 Tensorflow 中向損失 function 添加一個常數

[英]Adding a constant to Loss function in Tensorflow

我問了一個類似的問題,但沒有回應。 所以我再試一次,

I am reading a paper which suggest to add some value which is calculated outside of Tensorflow into the loss function of a neural network model in Tensorflow. 我給你看這里的報價(我已經模糊了不重要的部分):

在此處輸入圖像描述

在 Tensorflow 中擬合順序 Model 時,如何將預先計算的值添加到損失 function? 使用的損失 function 是 BinaryCrossentropy,您可以在論文引用的公式 (4) 中看到它。 附加值顯示在報價中,但這對於我認為的問題並不重要。

It is also not important how my model looks like, i just want to add a constant value to my loss function in tensorflow when fitting my model.

非常感謝!!

如您所見,在上面的等式中,結果可能非常低,即可能會出現梯度消失的問題。

為了緩解這種情況,他們要求為損失增加一個常數值。

現在,您可以使用簡單的常數,例如 1、10 或任何值,或者與他們所說的成正比的值。

你可以很容易地從一個部分的基本事實中計算出期望值。 另一部分是棘手的,因為在你訓練之前你不會有值,並且動態計算它們是不明智的。

該術語意味着基本事實和預測之間會有多大差異。

所以,如果你要實現這篇論文,那么,在你的損失中添加一個常數值 1,這樣它就不會消失。

似乎您希望能夠定義自己的損失。 另外,我不確定您使用的是實際的 Tensorflow 還是 Keras。 這是使用 Keras 的解決方案:

import tensorflow.keras.backend as K

def my_custom_loss(precomputed_value):
    def loss(y_true, y_pred):
        return K.binary_crossentropy(y_true, y_pred) + precomputed_value
    return loss

my_model = Sequential()
my_model.add(...)
# Add any layer there

my_model.compile(loss=my_custom_loss(42))

靈感來自https://towardsdatascience.com/advanced-keras-constructing-complex-custom-losses-and-metrics-c07ca130a618

編輯:答案只是添加一個常數項,但我意識到論文中建議的術語不是常數。

我沒有讀過這篇論文,但我認為從交叉熵定義來看,sigma 是基本事實,p 是預測值。 如果沒有其他依賴,解決方案甚至可以更簡單:

def my_custom_loss(y_pred, y_true):
    norm_term = K.square( K.mean(y_true) - K.mean(y_pred) )
    return K.binary_crossentropy(y_true, y_pred) + norm_term

# ...

my_model.compile(loss=my_custom_loss)

在這里,我假設期望只在每批上計算。 告訴我這是否是你想要的。 否則,如果您想以不同的規模計算統計數據,例如在每個 epoch 之后的整個數據集上,您可能需要使用回調。 在這種情況下,請更准確地說明您的問題,例如為y_predy_true添加一個小示例,以及預期的損失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM