我正在訓練一個模型來預測價格的百分比變化。MSE 和 RMSE 都給了我高達 99% 的準確率,但是當我檢查實際和預測指向同一方向的頻率時((actual >0 and pred > 0) or (actual < 0 and pred < 0)),我得到了大約 49%。
請問我如何定義一個對相反方向不利的自定義損失。我還想在給定方向上的預測超過實際時添加一個輕微的懲罰。
所以
actual = 0.1 and pred = -0.05應該受到更多的懲罰actual = 0.1 and pred = 0.05,- 并且
actual = 0.1 and pred = 0.15比罰款略多actual = 0.1 and pred = 0.05
uj5u.com熱心網友回復:
我會讓你來定義你的確切邏輯,但這里是你如何實作你想要的tf.cond:
import tensorflow as tf
y_true = [[0.1]]
y_pred = [[0.05]]
mse = tf.keras.losses.MeanSquaredError()
def custom_loss(y_true, y_pred):
penalty = 20
# actual = 0.1 and pred = -0.05 should be penalized a lot more than actual = 0.1 and pred = 0.05
loss = tf.cond(tf.logical_and(tf.greater(y_true, 0.0), tf.less(y_pred, 0.0)),
lambda: mse(y_true, y_pred) * penalty,
lambda: mse(y_true, y_pred) * penalty / 4)
#actual = 0.1 and pred = 0.15 slightly more penalty than actual = 0.1 and pred = 0.05
loss = tf.cond(tf.greater(y_pred, y_true),
lambda: loss * penalty / 2,
lambda: loss * penalty / 3)
return loss
print(custom_loss(y_true, y_pred))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346299.html
上一篇:為什么evaluate()的結果與上一個時期的結果不同?
下一篇:如何列印Keras張量值?
