经典的损失函数----交叉熵

1 交叉熵:
  分类问题中使用比较广泛的一种损失函数, 它刻画两个概率分布之间的距离
  给定两个概率分布p和q, 交叉熵为:  H(p, q) = -∑ p(x) log q(x)

  当事件总数是一定的时候, 概率函数满足:   任意x  p(X = x) ∈[0, 1] 且 Σ p(X=x) = 1

  也就是说 所有时间发生的概率都是0到1 之间 , 且总有一个时间会发生,概率的和就为1。

2 tensorflow中softmax:

  softmax回归可以作为学习算法来优化分类结果,在tensorflow中,softmax回归的参数被去掉了,它将神经网络输出变成一个概率分布。

  假设原始神经网络输出为 y1, y2, y3, ... , yn

  softmax 处理后的输出为: softmax(y)i = yi' = eyi / Σj=1n eyj

  原始神经网络的输出被用作置信度来生成新的输出,新的输出满足概率分布所有要求

  这样就可以通过交叉熵来衡量预测概率分布和真实概率分布的距离

3 从交叉熵的公式可以看出,它表达的是通过概率函数q来表达概率分布p的困难程度。

  交叉熵作为神经网络的损失函数的时候,q代表预测值, p代表真实值,交叉熵刻画两个分布的距离

  也就是交叉熵的值越小,两个概率分布越近

4 举例:

  假设有一个三分类问题,某个样例的正确答案是(1, 0, 0)

  

  经过softmax后的预测答案是(0.5, 0.4, 0.1)

  那么它和正确答案的交叉熵为: H( (1,0,0) , (0.5,0.4,0.1) ) = - ( 1*log0.5 + 0*log0.4 + 0*log0.1 ) ≈ 0.3

  

  另一个经过softmax的预测值是(0.8, 0.1, 0.1)

  他和正确答案的交叉熵是 : H( (1, 0, 0), (0.8, 0.1, 0.1) ) = - ( 1*log0.8 + 0*log0.1 + 0*log0.1 ) ≈ 0.1

从直观上看 容易知道第二个优于第一个,通过交叉熵计算结果也是一致的。

在tensorflow中 使用如下代码实现计算交叉熵:

  cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))

  其中 y_为真实值

    y 为预测值

    tf.clip_by_value(y, 1e-10, 1.0) 能够把y的值限定在1e-10和1.0之间,

      y如果小于1e-10 函数返回1e-10, 如果大于1.0 返回1.0, 如果在这之间就返回y

      这样做的目的是防止出现log0 的情况

    tf.log 为计算log函数

    * 操作不是矩阵乘法, 是对应位置元素的乘法

    tf.reduce_mean 取平均数。  如果衡量大小,和取和是一样的。

一般交叉熵会和sotmax回归一起使用,在tensorflow中进行了一起封装为:

  cross_entropy = tf.nn.sotmax_cross_entropy_with_logits(y, y_)

    其中y为预测值,y_为真实值

在只有一个正确答案的情况下,tensorflow提供了 加速计算函数

  tf.nn.sparse_softmax_cross_entropy_with_logits

      

机器学习之路:tensorflow 深度学习中 分类问题的损失函数 交叉熵的更多相关文章

  1. 深度学习面试题07:sigmod交叉熵、softmax交叉熵

    目录 sigmod交叉熵 Softmax转换 Softmax交叉熵 参考资料 sigmod交叉熵 Sigmod交叉熵实际就是我们所说的对数损失,它是针对二分类任务的损失函数,在神经网络中,一般输出层只 ...

  2. 机器学习之路: 深度学习 tensorflow 神经网络优化算法 学习率的设置

    在神经网络中,广泛的使用反向传播和梯度下降算法调整神经网络中参数的取值. 梯度下降和学习率: 假设用 θ 来表示神经网络中的参数, J(θ) 表示在给定参数下训练数据集上损失函数的大小. 那么整个优化 ...

  3. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

  4. (转) TensorFlow深度学习,一篇文章就够了

    TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6   原文出处: 我爱计算机 (@tobe迪豪 )    作者: 陈迪 ...

  5. TensorFlow深度学习,一篇文章就够了

    http://blog.jobbole.com/105602/ 作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者. TensorFlow深度学习框架 Google不仅是大数 ...

  6. 问题集录--TensorFlow深度学习

    TensorFlow深度学习框架 Google不仅是大数据和云计算的领导者,在机器学习和深度学习上也有很好的实践和积累,在2015年年底开源了内部使用的深度学习框架TensorFlow. 与Caffe ...

  7. TensorFlow——深度学习笔记

    深度学习与传统机器学习的区别 传统机器学习输入的特征为人工提取的特征,例如人的身高.体重等,深度学习则不然,它接收的是基础特征,例如图片像素等,通过多层复杂特征提取获得. 深度学习.人工智能.机器学习 ...

  8. 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)

    [说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...

  9. 卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

    卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮 ...

随机推荐

  1. javascript 中检测数据类型的方法

    typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...

  2. 查看 CUDA cudnn 版本

    cuda 版本 cat /usr/local/cuda/version.txt cudnn 版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MA ...

  3. 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)

    使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...

  4. MVC中检测到有潜在危险的 Request.Form 值

    在做mvc项目时,当使用xhedit or.ueditor编辑器时,点击提交时,编辑器中的内容会带有html标签提交给服务器,这时就是会报错,出现如下内容: “/”应用程序中的服务器错误. 从客户端( ...

  5. LINUX vim 修改文件 退出

    vim 保存退出, 先按ESC ,然后:wq(保存退出)W:write,写入 Q:quit,退出, 也可以直接输入X,代表WQ,也是保存退出 或者 先按ESC,再按shift+ZZ 也是保存退出 正常 ...

  6. 01-Coredump核心转存&&Linux程序地址分析【转】

    转自:http://www.itwendao.com/article/detail/404132.html 目录(?)[-] 一Core Dump核心转存 二Linux程序地址分析 一Core Dum ...

  7. MySQL增量备份与恢复实例【转】

    小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份.增量备份的原理就是使用了mysql的binlog日志.本次操作的 ...

  8. java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)

    1. 问题描述 Servlet中执行下面一段代码: public void doGet(HttpServletRequest request, HttpServletResponse response ...

  9. 【Android开发】之MediaPlayer的错误分析

    最近在做媒体播放器,使用了Android自带的MediaPlayer,经常性会碰到MediaPlayer报错的情况,找过网上的,感觉总结的不是很好或者比较散.下面,我来总结一下使用MediaPlaye ...

  10. ActiveMQ:初见&安装试运行

    官网:http://activemq.apache.org/ ActiveMQ是一个消息中间件,在大型互联网应用中有广泛的使用. 当前最新版本:5.15.4,发布于2018-05-22,开源.Apac ...