keras 自定义评估函数和损失函数loss训练模型后加载模型出现ValueError: Unknown metric function:fbeta_score
keras分類回歸的損失函數與評價指標
- 目標函數
(1)mean_squared_error / mse 均方誤差,常用的目標函數,公式為((y_pred-y_true)**2).mean()
(2)mean_absolute_error / mae 絕對值均差,公式為(|y_pred-y_true|).mean()
(3) mean_absolute_percentage_error / mape公式為:(|(y_true - y_pred) / clip((|y_true|),epsilon, infinite)|).mean(axis=-1) * 100,和mae的區別就是,累加的是(預測值與實際值的差)除以(剔除不介于epsilon和infinite之間的實際值),然后求均值。
(4)mean_squared_logarithmic_error / msle公式為: (log(clip(y_pred, epsilon, infinite)+1)- log(clip(y_true, epsilon,infinite)+1.))^2.mean(axis=-1),這個就是加入了log對數,剔除不介于epsilon和infinite之間的預測值與實際值之后,然后取對數,作差,平方,累加求均值。
(5)squared_hinge 公式為:(max(1-y_truey_pred,0))^2.mean(axis=-1),取1減去預測值與實際值乘積的結果與0比相對大的值的平方的累加均值。
(6)hinge 公式為:(max(1-y_truey_pred,0)).mean(axis=-1),取1減去預測值與實際值乘積的結果與0比相對大的值的的累加均值。
(7)binary_crossentropy: 常說的邏輯回歸, 就是常用的交叉熵函
(8)categorical_crossentropy: 多分類的邏輯
- 性能評估函數
(1)binary_accuracy: 對二分類問題,計算在所有預測值上的平均正確率
(2)categorical_accuracy:對多分類問題,計算再所有預測值上的平均正確率
(3)sparse_categorical_accuracy:與categorical_accuracy相同,在對稀疏的目標值預測時有用
(4)top_k_categorical_accracy: 計算top-k正確率,當預測值的前k個值中存在目標類別即認為預測正確
(5)sparse_top_k_categorical_accuracy:與top_k_categorical_accracy作用相同,但適用于稀疏情況
==========================================================================================
keras自定義評估函數
有時候訓練模型,現有的評估函數并不足以科學的評估模型的好壞,這時候就需要自定義一些評估函數,比如樣本分布不均衡是準確率accuracy評估無法判定一個模型的好壞,這時候需要引入精確度和召回率作為評估標準,不幸的是keras沒有這些評估函數。以下是參考別的文章摘取的兩個自定義評估函數
召回率:
def recall(y_true, y_pred):true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))recall = true_positives / (possible_positives + K.epsilon())return recall精確度:
def precision(y_true, y_pred):true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))precision = true_positives / (predicted_positives + K.epsilon())return precision
自定義了評估函數,一般在編譯模型階段加入即可:
自定義了損失函數focal_loss一般也在編譯階段加入:
其他的沒有特別要注意的點,直接按照原來的思路訓練一版模型出來就好了,關鍵的地方在于加載模型這里,自定義的函數需要特殊的加載方式,不然會出現加載沒有自定義函數的問題:ValueError: Unknown loss function:focal_loss
解決方案:
model_name = 'test_calssification_model.h5' model_dfcw = load_model(model_name,custom_objects={'focal_loss': focal_loss,'fbeta_score':fbeta_score})注意點:將自定義的損失函數和評估函數都加入到custom_objects里,以上就是在自定義一個損失函數從編譯模型階段到加載模型階段出現的所有的問題。
參考自:https://blog.csdn.net/aojue1109/article/details/88058965?
? ? ? ? ? ? ? ?https://blog.csdn.net/wangdongwei0/article/details/82321217
總結
以上是生活随笔為你收集整理的keras 自定义评估函数和损失函数loss训练模型后加载模型出现ValueError: Unknown metric function:fbeta_score的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络CNN(1)——图像卷积与反
- 下一篇: keras多输出模型