簡體   English   中英

Keras實現:具有不確定性輸出的定制損失函數

[英]Keras implementation: Custom loss function with uncertainty output

對於回歸任務,我想自定義損失函數以另外輸出確定性度量。

最初的正常網絡為:

model = Sequential()
model.add(Dense(15, input_dim=7, kernel_initializer='normal'))
model.add(Dense(1, kernel_initializer='normal'))
model.compile(loss='mean_squared_error', optimizer='adam')

我想向損失函數添加確定性指標 sigma 例如,取決於預測的准確性如何,不同的sigma大小會導致最小的損失。

loss = (y_pred-y_true)^2/(2*sigma^2) + log(sigma)

NN的最終輸出將是y_predsigma

我在實現中有點迷路(對keras來說是新的):

  1. 我們將在哪里初始化/存儲sigma ,以便在訓練過程中圍繞類似的重復數據點進行更新。
  2. 我們如何將變量sigma從損失函數連接到第二個NN輸出。

我目前的基礎課程,顯然我缺少這些基礎知識

def custom_loss(y_true, y_pred, sigma):
    loss = pow((y_pred - y_true), 2)/(2 * pow(sigma, 2))+math.log(sigma)
    return loss, sigma

model = Sequential()
model.add(Dense(15, input_dim=7, kernel_initializer='normal'))
model.add(Dense(2, kernel_initializer='normal'))
model.compile(loss=custom_loss, optimizer='adam')

任何提示/指導都受到高度贊賞。 謝謝!

關鍵是將y_pred從標量擴展為向量

def custom_loss(y_true, y_pred):
    loss = pow((y_pred[0] - y_true), 2) / (2 * pow(y_pred[1], 2)) + \
           tf.math.log(y_pred[1])
    return loss

model = Sequential()
model.add(Dense(15, input_dim=7, kernel_initializer='normal'))
model.add(Dense(2, kernel_initializer='normal'))
model.compile(loss=custom_loss, optimizer='adam')

然后,模型將sigma返回到預測。

Y = model.predict(X)  # Y = [prediction, sigma]

暫無
暫無

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

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