日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

keras 自定义评估函数和损失函数loss训练模型后加载模型出现ValueError: Unknown metric function:fbeta_score

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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


自定義了評估函數,一般在編譯模型階段加入即可:

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy', precision, recall])


自定義了損失函數focal_loss一般也在編譯階段加入:

model.compile(optimizer=Adam(lr=0.0001), loss=[focal_loss],metrics=['accuracy',fbeta_score], )

其他的沒有特別要注意的點,直接按照原來的思路訓練一版模型出來就好了,關鍵的地方在于加載模型這里,自定義的函數需要特殊的加載方式,不然會出現加載沒有自定義函數的問題: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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。