Keras loss函数剖析


Posted in Python onJuly 06, 2020

我就废话不多说了,大家还是直接看代码吧~

'''
Created on 2018-4-16
'''
def compile(
self,
optimizer, #优化器
loss, #损失函数,可以为已经定义好的loss函数名称,也可以为自己写的loss函数
metrics=None, #
sample_weight_mode=None, #如果你需要按时间步为样本赋权(2D权矩阵),将该值设为“temporal”。默认为“None”,代表按样本赋权(1D权),和fit中sample_weight在赋值样本权重中配合使用
weighted_metrics=None, 
target_tensors=None,
**kwargs #这里的设定的参数可以和后端交互。
)

实质调用的是Keras\engine\training.py 中的class Model中的def compile
一般使用model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])

# keras所有定义好的损失函数loss:
# keras\losses.py
# 有些loss函数可以使用简称:
# mse = MSE = mean_squared_error
# mae = MAE = mean_absolute_error
# mape = MAPE = mean_absolute_percentage_error
# msle = MSLE = mean_squared_logarithmic_error
# kld = KLD = kullback_leibler_divergence
# cosine = cosine_proximity
# 使用到的数学方法:
# mean:求均值
# sum:求和
# square:平方
# abs:绝对值
# clip:[裁剪替换](https://blog.csdn.net/qq1483661204/article/details)
# epsilon:1e-7
# log:以e为底
# maximum(x,y):x与 y逐位比较取其大者
# reduce_sum(x,axis):沿着某个维度求和
# l2_normalize:l2正则化
# softplus:softplus函数
# 
# import cntk as C
# 1.mean_squared_error:
#  return K.mean(K.square(y_pred - y_true), axis=-1) 
# 2.mean_absolute_error:
#  return K.mean(K.abs(y_pred - y_true), axis=-1)
# 3.mean_absolute_percentage_error:
#  diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true),K.epsilon(),None))
#  return 100. * K.mean(diff, axis=-1)
# 4.mean_squared_logarithmic_error:
#  first_log = K.log(K.clip(y_pred, K.epsilon(), None) + 1.)
#  second_log = K.log(K.clip(y_true, K.epsilon(), None) + 1.)
#  return K.mean(K.square(first_log - second_log), axis=-1)
# 5.squared_hinge:
#  return K.mean(K.square(K.maximum(1. - y_true * y_pred, 0.)), axis=-1)
# 6.hinge(SVM损失函数):
#  return K.mean(K.maximum(1. - y_true * y_pred, 0.), axis=-1)
# 7.categorical_hinge:
#  pos = K.sum(y_true * y_pred, axis=-1)
#  neg = K.max((1. - y_true) * y_pred, axis=-1)
#  return K.maximum(0., neg - pos + 1.)
# 8.logcosh:
#  def _logcosh(x):
#   return x + K.softplus(-2. * x) - K.log(2.)
#  return K.mean(_logcosh(y_pred - y_true), axis=-1)
# 9.categorical_crossentropy:
#  output /= C.reduce_sum(output, axis=-1)
#  output = C.clip(output, epsilon(), 1.0 - epsilon())
#  return -sum(target * C.log(output), axis=-1)
# 10.sparse_categorical_crossentropy:
#  target = C.one_hot(target, output.shape[-1])
#  target = C.reshape(target, output.shape)
#  return categorical_crossentropy(target, output, from_logits)
# 11.binary_crossentropy:
#  return K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
# 12.kullback_leibler_divergence:
#  y_true = K.clip(y_true, K.epsilon(), 1)
#  y_pred = K.clip(y_pred, K.epsilon(), 1)
#  return K.sum(y_true * K.log(y_true / y_pred), axis=-1)
# 13.poisson:
#  return K.mean(y_pred - y_true * K.log(y_pred + K.epsilon()), axis=-1)
# 14.cosine_proximity:
#  y_true = K.l2_normalize(y_true, axis=-1)
#  y_pred = K.l2_normalize(y_pred, axis=-1)
#  return -K.sum(y_true * y_pred, axis=-1)

补充知识:一文总结Keras的loss函数和metrics函数

Loss函数

定义:

keras.losses.mean_squared_error(y_true, y_pred)

用法很简单,就是计算均方误差平均值,例如

loss_fn = keras.losses.mean_squared_error
a1 = tf.constant([1,1,1,1])
a2 = tf.constant([2,2,2,2])
loss_fn(a1,a2)
<tf.Tensor: id=718367, shape=(), dtype=int32, numpy=1>

Metrics函数

Metrics函数也用于计算误差,但是功能比Loss函数要复杂。

定义

tf.keras.metrics.Mean(
  name='mean', dtype=None
)

这个定义过于简单,举例说明

mean_loss([1, 3, 5, 7])
mean_loss([1, 3, 5, 7])
mean_loss([1, 1, 1, 1])
mean_loss([2,2])

输出结果

<tf.Tensor: id=718929, shape=(), dtype=float32, numpy=2.857143>

这个结果等价于

np.mean([1, 3, 5, 7, 1, 3, 5, 7, 1, 1, 1, 1, 2, 2])

这是因为Metrics函数是状态函数,在神经网络训练过程中会持续不断地更新状态,是有记忆的。因为Metrics函数还带有下面几个Methods

reset_states()
Resets all of the metric state variables.
This function is called between epochs/steps, when a metric is evaluated during training.

result()
Computes and returns the metric value tensor.
Result computation is an idempotent operation that simply calculates the metric value using the state variables

update_state(
  values, sample_weight=None
)
Accumulates statistics for computing the reduction metric.

另外注意,Loss函数和Metrics函数的调用形式,

loss_fn = keras.losses.mean_squared_error mean_loss = keras.metrics.Mean()

mean_loss(1)等价于keras.metrics.Mean()(1),而不是keras.metrics.Mean(1),这个从keras.metrics.Mean函数的定义可以看出。

但是必须先令生成一个实例mean_loss=keras.metrics.Mean(),而不能直接使用keras.metrics.Mean()本身。

以上这篇Keras loss函数剖析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
python调用自定义函数的实例操作
Jun 26 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
python内置模块collections知识点总结
Dec 19 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 Python
详解python的变量缓存机制
Jan 24 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 #Python
Python自省及反射原理实例详解
Jul 06 #Python
如何通过命令行进入python
Jul 06 #Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 #Python
python else语句在循环中的运用详解
Jul 06 #Python
Keras模型转成tensorflow的.pb操作
Jul 06 #Python
python如何进入交互模式
Jul 06 #Python
You might like
php代码书写习惯优化小结
2013/06/20 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
php实现递归的三种基本方式
2020/07/04 PHP
php实现简单加入购物车功能
2017/03/07 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
JavaScript 原型继承
2011/12/26 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
JS实现按比例缩小图片宽高
2020/08/24 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
python性能测试工具locust的使用
2020/12/28 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
文史专业毕业生自荐信
2013/11/17 职场文书
明星员工获奖感言
2014/08/14 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
学习十八大宣传标语
2014/10/09 职场文书
社区节水倡议书
2015/04/29 职场文书