我有一個 CNN 模型,它的單個輸出神經元由 sigmoid 激活組成,因此它的值在 0 和 1 之間。我想計算這個特定輸出神經元的損失組合。
我同樣使用了平均絕對誤差和均方誤差,并產生了這樣的損失:
loss = tf.keras.losses.MeanAbsoluteError() tf.keras.losses.MeanSquaredError()
現在,由于某些問題,tensorflow 框架不支持這樣的損失函式。這是錯誤:
Traceback (most recent call last):
File "run_kfold.py", line 189, in <module>
loss = tf.keras.losses.MeanAbsoluteError() tf.keras.losses.MeanSquaredError()
TypeError: unsupported operand type(s) for : 'MeanAbsoluteError' and 'MeanSquaredError'
誰能建議如何計算某個輸出層的組合損失。這將有助于組合創建多個加權損失,如下所示:
l_1 = 0.6
l_2 = 0.4
loss = l_1 * tf.keras.losses.MeanAbsoluteError() l_2 *tf.keras.losses.MeanSquaredError()
然后我可以將此損失變數傳遞給model.compile()函式
model.compile(optimizer=opt,
loss=loss,
metrics = ['accuracy', sensitivity, specificity, tf.keras.metrics.RootMeanSquaredError(name='rmse')]
)
uj5u.com熱心網友回復:
您可以撰寫一個函式并使用MeanAbsoluteError()
和MeanSquaredError()
計算 custom_loss 并回傳它:
import tensorflow as tf
# model = your_model
...
def custom_loss(y_true, y_pred):
l_1 = 0.6
l_2 = 0.4
mae = tf.keras.losses.MeanAbsoluteError()
mse = tf.keras.losses.MeanAbsoluteError()
loss_mae = mae(y_true , y_pred)
loss_mse = mse(y_true , y_pred)
total_loss = l_1*loss_mae l_2*loss_mse
return total_loss
model.compile(loss=custom_loss,
optimizer='Adam')
model.fit(x_train, y_train, batch_size=BATCH_SIZE, epochs=EPOCHS)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495338.html