![](/img/trans.png)
[英]Keras - Implementation of custom loss function with multiple outputs
[英]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_pred
和sigma
。
我在實現中有點迷路(對keras來說是新的):
sigma
,以便在訓練過程中圍繞類似的重復數據點進行更新。 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.