交叉熵

MNIST 手写数字识别(一)

不羁的心 提交于 2019-12-05 09:04:02
MNIST 手写数字识别模型建立与优化 本篇的主要内容有: TensorFlow 处理MNIST数据集的基本操作 建立一个基础的识别模型 介绍 S o f t m a x Softmax S o f t m a x 回归以及交叉熵等 MNIST是一个很有名的手写数字识别数据集(基本可以算是“Hello World”级别的了吧),我们要了解的情况是,对于每张图片,存储的方式是一个 28 * 28 的矩阵,但是我们在导入数据进行使用的时候会自动展平成 1 * 784(28 * 28)的向量,这在TensorFlow导入很方便,在使用命令下载数据之后,可以看到有四个数据集: 模型 来看一个最基础的模型建立,首先了解TensoFlow对MNIST数据集的一些操作 1.TensorFlow 对MNIST数据集的操作 下载、导入 from tensorflow.examples.tutorials.mnist import input_data # 第一次运行会自动下载到代码所在的路径下 mnist = input_data.read_data_sets('location', one_hot=True) # location 是保存的文件夹的名称 打印MNIST数据集的一些信息,通过这些我们就可以知道这些数据大致如何使用了 # 打印 mnist 的一些信息 from tensorflow

TensorFlow之计算交叉熵的函数 tf.nn.sparse_softmax_cross_entropy_with_logits

别说谁变了你拦得住时间么 提交于 2019-12-03 13:03:47
写在前面:起因是遇到一个错误:ValueError: Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2).于是去了解接下来介绍的这两个函数。 tf.nn.sparse_softmax_cross_entropy_with_logits tf.nn.sparse_softmax_cross_entropy_with_logits( _sentinel=None, labels=None, logits=None, name=None ) labels :为样本的真实标签, shape为[batch_size],每一个值∈[0,num_classes),其实就是代表了batch中对应样本的类别,如二分类的label[0,0,1,0...] logits :为神经网络输出层的输出,shape为[batch_size,num_classes] 具体使用如下: import tensorflow as tf #cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=labels) cross_entropy = tf.nn.sparse_softmax

Tensorflow中几个常用的loss

♀尐吖头ヾ 提交于 2019-12-02 03:16:57
   第一次接触Tensorflow,用VGG16对一个人脸的dataset(CACD2000)进行年龄预测.   网络结构很简单,前6层完全相同,加两个fc,最后一层fc为1.   但运行时遇到一些问题,这让我关注到: tf.nn.softmax_cross_entropy_with_logits( _sentinel=None, # pylint: disable=invalid-namelabels=None,logits=None,dim=-1,name=None,axis=None): tf.nn.sigmoid_cross_entropy_with_logits( _sentinel=None,labels=None,logits=None,name=None):   softmax交叉熵的对象是互斥的,如一个动物可以是猫或者狗,但不能同时为猫狗.   sigmoid交叉熵用于计算的对象是彼此依赖的且不互斥(mutually exclusive),如一副图像可以同时包含猫狗两个元素.  我的vgg中,age和label显然是not mutually exclusive的. 来源: https://www.cnblogs.com/Wiikk/p/11728345.html

损失函数

醉酒当歌 提交于 2019-12-02 02:59:05
损失函数综述 https://zhuanlan.zhihu.com/p/36503849 简单的交叉熵损失函数,你真的懂了吗? https://zhuanlan.zhihu.com/p/38241764 损失函数 - 交叉熵损失函数 https://zhuanlan.zhihu.com/p/35709485 损失函数 - 交叉熵损失函数 https://zhuanlan.zhihu.com/p/35709485 推荐系统遇上深度学习(六十二)-[阿里]电商推荐中的特殊特征蒸馏 https://www.jianshu.com/p/ee06e58e0ea7 来源: https://www.cnblogs.com/pengwang52/p/11727594.html

交叉熵损失函数的优点(转载)

三世轮回 提交于 2019-12-01 15:49:32
利用一些饱和激活函数的如sigmoid激活时,假如利用均方误差损失,那么损失函数向最后一层的权重传递梯度时,梯度公式为 可见梯度与最后一层的激活函数的导数成正比,因此,如果起始输出值比较大,也即激活函数的导数比较小,那么整个梯度幅度更新幅度都比较小,收敛时间很长。若一开始输出值比较小那么更新速度比较好,收敛也快,因此不稳定。且与输出值a与真实值的误差成正比。 再看损失函数改成交叉熵损失时: 此时损失函数对于最后一层权重的梯度不再跟激活函数的导数相关,只跟输出值和真实值的差值成正比,此时收敛较快。又反向传播是连乘的,因此整个权重矩阵的更新都会加快。 另外,多分类交叉熵损失求导更简单,损失仅与正确类别的概率有关。而且损失对于softmax激活层的输入求导很简单。 ———————————————— 版权声明:本文为CSDN博主「无它,唯手熟尔」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_42422981/article/details/90645074 来源: https://www.cnblogs.com/hugh2006/p/11691369.html

深度学习中的交叉熵

故事扮演 提交于 2019-12-01 07:23:15
熵:是信息量的期望值,它是一个随机变量的确定性的度量。 交叉熵: 刻画的是两个概率分布之间的距离,或可以说它刻画的是通过概率分布 q来表达概率分布p的困难程度。p代表正确答案,q代表预测值,交叉熵越小,两个概率分布越接近。 那么,在神经网络中怎样把前向传播得到的结果也变成概率分布呢? Softmax回归就是一个非常有用的方法。 假设原始的神经网络的输出为 y1,y2,...,yn,那么经过Softmax回归处理之后的输出为: 这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。 参考:https://blog.csdn.net/weixin_37567451/article/details/80895309 来源: https://www.cnblogs.com/iamdongyang/p/11668400.html

deep_learning_cross_entropy

♀尐吖头ヾ 提交于 2019-11-30 16:06:51
交叉熵损失函数 交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比,它能更有效地促进ANN的训练。在介绍交叉熵代价函数之前,本文先简要介绍二次代价函数,以及其存在的不足。 二次代价函数的不足 ANN的设计目的之一是为了使机器可以像人一样学习知识。人在学习分析新事物时,当发现自己犯的错误越大时,改正的力度就越大。比如投篮:当运动员发现自己的投篮方向离正确方向越远,那么他调整的投篮角度就应该越大,篮球就更容易投进篮筐。同理,我们希望:ANN在训练时,如果预测值与实际值的误差越大,那么在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛。然而,如果使用二次代价函数训练ANN,看到的实际效果是,如果误差越大,参数调整的幅度可能更小,训练更缓慢。 以一个神经元的二类分类训练为例,进行两次实验(ANN常用的激活函数为sigmoid函数,该实验也采用该函数):输入一个相同的样本数据x=1.0(该样本对应的实际分类y=0);两次实验各自随机初始化参数,从而在各自的第一次前向传播后得到不同的输出值,形成不同的代价(误差): 交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式。与二次代价函数相比

deep_learning_MNIST数据集

ぐ巨炮叔叔 提交于 2019-11-30 16:02:59
Code_link: https://pan.baidu.com/s/1dshQt57196fhh67F8nqWow 本文是为既没有机器学习基础也没了解过TensorFlow的码农、序媛们准备的。如果已经了解什么是MNIST和softmax回归本文也可以再次帮助你提升理解。在阅读之前,请先确保在合适的环境中安装了TensorFlow( windows安装请点这里 ,其他版本请官网找),适当编写文章中提到的例子能提升理解。 首先我们需要了解什么是“ MNIST ”? 每当我们学习一门新的语言时,所有的入门教程官方都会提供一个典型的例子——“Hello World”。而在机器学习中,入门的例子称之为MNIST。 MNIST是一个简单的视觉计算数据集,它是像下面这样手写的数字图片: 每张图片还额外有一个标签记录了图片上数字是几,例如上面几张图的标签就是:5、0、4、1。 本文将会展现如何训练一个模型来识别这些图片,最终实现模型对图片上的数字进行预测。 首先要明确,我们的目标并不是要训练一个能在实际应用中使用的模型,而是通过这个过程了解如何使用TensorFlow完成整个机器学习的过程。我们会从一个非常简单的模型开始——Softmax回归。 然后要明白,例子对应的源代码非常简单,所有值得关注的信息仅仅在三行代码中。然而,这对于理解TensorFlow如何工作以及机器学习的核心概念非常重要

交叉熵

妖精的绣舞 提交于 2019-11-29 12:32:50
参考: http://www.cnblogs.com/fantasy01/p/4581803.html?utm_source=tuicool http://blog.csdn.net/xbmatrix/article/details/58248347 https://www.zhihu.com/question/41252833/answer/141598211 1、信息 引用香农的话,信息是用来消除随机不确定性的东西,则某个类(xi)的信息定义如下:                        2、信息熵 信息熵便是信息的期望值,可以记作:                             熵只依赖X的分布,和X的取值没有关系,熵是用来度量不确定性,当熵越大,概率说X=xi的不确定性越大,反之越小,在机器学期中分类中说,熵越大即这个类别的不确定性更大,反之越小,当随机变量的取值为两个时,熵随概率的变化曲线如下图:                      当p=0或p=1时,H(p)=0,随机变量完全没有不确定性,当p=0.5时,H(p)=1,此时随机变量的不确定性最大 更特别一点,如果是个二分类系统,那么此系统的熵为: 3. 条件熵 X给定条件下Y的条件分布的熵对X的数学期望,在机器学习中为选定某个特征后的熵,公式如下:                 

【机器学习】交叉熵与KL散度

↘锁芯ラ 提交于 2019-11-28 11:04:33
写在前面的总结: 1、目前分类损失函数为何多用交叉熵,而不是KL散度。 首先损失函数的功能是通过样本来计算模型分布与目标分布间的差异,在分布差异计算中,KL散度是最合适的。但在实际中,某一事件的标签是已知不变的(例如我们设置猫的label为1,那么所有关于猫的样本都要标记为1),即目标分布的熵为常数。而根据下面KL公式可以看到, KL散度 - 目标分布熵 = 交叉熵(这里的“-”表示裁剪) 。所以我们不用计算KL散度,只需要计算交叉熵就可以得到模型分布与目标分布的损失值。 从上面介绍,知道了模型分布与目标分布差异可用交叉熵代替KL散度的条件是目标分布为常数。如果目标分布是有变化的(如同为猫的样本,不同的样本,其值也会有差异),那么就不能使用交叉熵,例如蒸馏模型的损失函数就是KL散度,因为蒸馏模型的目标分布也是一个模型,该模型针对同类别的不同样本,会给出不同的预测值(如两张猫的图片a和b,目标模型对a预测为猫的值是0.6,对b预测为猫的值是0.8)。 注:交叉熵和KL散度应用方式不同的另一种解释(我更倾向于上面我自己的解释,更具公式解释性) : 交叉熵:其用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小 。这也是为什么在机器学习中的分类算法中,我们总是最小化交叉熵,因为交叉熵越低,就证明由算法所产生的策略最接近最优策略