Keras例項 自定義損失函式 指標函式

2021-10-02 05:57:13 字數 1212 閱讀 7468

在訓練模型的時候,keras提供了許多損失函式供我們使用,但是即便如此,我們也會有遇到需要用自己的損失函式的情況,這樣我們就要自定義乙個損失函式。比如我現在需要定義乙個損失函式,類似於relu函式,低於threshold的loss為0,大於threshold的loss就是他們之間的差。注意我們在定義損失函式的時候,必須可以求導。任何損失函式必須有y_true, y_pred兩個引數,他們的型別為tensor。

def

relu_loss

(y_true, y_pred, threshold =1)

:ifnot k.is_tensor(y_pred)

: y_pred = k.constant(y_pred)

y_true = k.cast(y_true, y_pred.dtype)

return k.

sum(k.cast(k.greater(k.

abs(y_pred - y_true)

, threshold)

, k.floatx())

* k.

abs(y_pred - y_true)

)

在定義完之後,我們就可以通過名字把損失函式和指標函式給模型了。

model.

compile

(optimizer=

'rmsprop'

, loss=relu_loss, metrics=

[relu_loss]

)

要注意的是,我們在重新讀取模型的時候,因為我們自定義了損失函式和指標函式,所以我們在用load_model的時候,必須通過custom_objects引數宣告這些函式名字代表了什麼。

model = load_model(

'linear.model'

, custom_objects=

)

可以看到這個損失函式在高學習率下收斂的非常快。

epoch 10/300

8/8 [******************************] - 0s 4ms/step - loss: 0.0000e+00 - relu_loss: 0.0000e+00 - val_loss: 0.0000e+00 - val_relu_loss: 0.0000e+00

以上就是如何通過keras自定義損失函式和指標函式了。

keras訓練和載入自定義的損失函式

keras 自定義loss 函式 有的時候keras 裡面提供的loss函式不能滿足我們的需求,我們就需要自己去提供loss函式,比如dice loss。dice loss 一般是dice coef 取反,因此先求dice coef import keras.backend as k def dic...

tensflow自定義損失函式

tensflow 不僅支援經典的損失函式,還可以優化任意的自定義損失函式。商品銷量時,如果 值比真實銷量大,商家損失的是生產商品的成本 如果 值比真實值小,損失的則是商品的利潤。比如如果乙個商品的成本是1元,但利潤是10元,那麼少 乙個就少賺9元 而多 乙個才虧1元,為了最大化利潤預期,需要將損失函...

tensflow自定義損失函式

tensflow 不僅支援經典的損失函式,還可以優化任意的自定義損失函式。商品銷量時,如果 值比真實銷量大,商家損失的是生產商品的成本 如果 值比真實值小,損失的則是商品的利潤。比如如果乙個商品的成本是1元,但利潤是10元,那麼少 乙個就少賺9元 而多 乙個才虧1元,為了最大化利潤預期,需要將損失函...