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相关推荐
- 【云音乐】从手游APP到云音乐视频标签分类,时隔3个月再次面对多标签任务,终于摸索出了一些小经验。附自定义评估函数代码
[云音乐]从手游APP到云音乐视频标签分类,时隔3个月再次面对多标签任务,终于摸索出了一些小经验. 前言 一个好用的评估函数 常用的多标签任务评估函数 我选择平均准确率 合理的特征处理和模型 特征处理 ...
- keras dense sigmoid_tf.keras一个存在自定义层时加载模型时的小坑
前言 Tensorflow在现在的doc里强推Keras,用过之后感觉真的很爽,搭模型简单,模型结构可打印,瞬间就能train起来不用自己写get_batch和evaluate啥的,跟用原生tenso ...
- Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...
- Keras : 训练minst数据集并加载模型对本地手写图片进行预测
我是本期目录酱 引入 minst数据集介绍 训练模型与测试的py代码分析 训练及测试的py代码(全) 训练及测试结果分析 加载模型并预测本地图片结果 加载模型并预测本地图片py代码(不全) 加载模型并 ...
- Pytorch网络模型权重初始化、保存与加载模型、加载预训练模型、按需设置学习率
前言 在我们对神经网络模型进行训练时,往往需要对模型进行初始化或者加载预训练模型.本文将对模型的权重初始化与加载预训练模型做一个学习记录,以便后续查询使用. 权重初始化 常见的初始化方法 PyTorc ...
- 【Android 插件化】基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同意后加载插件 | 隐藏恶意插件 )
文章目录 一.自定义路径加载插件 二.系统路径加载插件 三.用户同意后加载插件 四.隐藏恶意插件 一.自定义路径加载插件 插件化应用中 , 宿主应用 加载 插件 APK , 需要获取该插件 APK 文 ...
- tensorflow tf.train.ExponentialMovingAverage().variables_to_restore()函数 (用于加载模型时将影子变量直接映射到变量本身)
variables_to_restore函数,是TensorFlow为滑动平均值提供.之前,也介绍过通过使用滑动平均值可以让神经网络模型更加的健壮.我们也知道,其实在TensorFlow中,变量的滑动 ...
- python加载模型包占用内存多大_如何保持Keras模型加载到内存中并在需要时使用它? - python...
我正在阅读Keras blog讲解如何使用Flask创建简单的图像分类器Restful API.我想知道如何在不使用python的其他Web框架中实现加载模型的相同方法. 在下面的代码中,将在服务器启 ...
- flask keras 多线程环境下加载模型
keras 多线程环境下加载模型 Tensor Tensor is not an element of this graph. 问题场景 keras 使用flask 发布深度学习模型服务,模型有一个定 ...
最新文章
- exit函数_全面深入了解 Python 魔法函数
- 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
- List list= new ArrayList为什么这样写 接口引用指向实现类的对象
- Replica Sets+Sharding方案之真枪实弹篇
- Docker 实战总结(非常全面)
- 当内容超出最大的长度的时候,使用CSS使文本显示省略号
- 18行代码AC_Wet Shark and Bishops CodeForces - 621B(数学推导+映射)
- sklearn自学指南(part2)--使用手册的主目录
- 还不会docker+k8s?2020年,就要面对现实了...
- docker-compose 实战案例
- 如何在Hyper-V上安装Centos7
- Java基础学习总结(142)——以正确的姿势使用Java 8 Optional
- 手把手教你使用LabVIEW OpenCV dnn实现物体识别(Object Detection)含源码
- Setup Factory 提示 Invalid start mode : archive filename 的解决办法
- ubuntu20.04显卡驱动3分钟安装方法
- 中华传统吉祥图案集锦
- Nginx代理高德API(无法地图选点)
- 云重磅 | 阿里巴巴平均每天纳税超1.4亿;谷歌、Face book与AWS将共建美欧新海底电缆;阿里发布谣言粉碎机:1秒辨真伪...
- IntelliJ Idea及其同系列产品解决网页查看源码Html排版样式乱了
- 关于QC样本的制备与分析