TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法


Posted in Python onApril 19, 2020

在计算loss的时候,最常见的一句话就是tf.nn.softmax_cross_entropy_with_logits,那么它到底是怎么做的呢?

首先明确一点,loss是代价值,也就是我们要最小化的值

tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

除去name参数用以指定该操作的name,与方法有关的一共两个参数:

第一个参数logits:就是神经网络最后一层的输出,如果有batch的话,它的大小就是[batchsize,num_classes],单样本的话,大小就是num_classes

第二个参数labels:实际的标签,大小同上

具体的执行流程大概分为两步:

第一步是先对网络最后一层的输出做一个softmax,这一步通常是求取输出属于某一类的概率,对于单样本而言,输出就是一个num_classes大小的向量([Y1,Y2,Y3...]其中Y1,Y2,Y3...分别代表了是属于该类的概率)

softmax的公式是:TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法

至于为什么是用的这个公式?这里不介绍了,涉及到比较多的理论证明

第二步是softmax的输出向量[Y1,Y2,Y3...]和样本的实际标签做一个交叉熵,公式如下:

TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法

其中TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法指代实际的标签中第i个的值(用mnist数据举例,如果是3,那么标签是[0,0,0,1,0,0,0,0,0,0],除了第4个值为1,其他全为0)

TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法就是softmax的输出向量[Y1,Y2,Y3...]中,第i个元素的值

显而易见,预测TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法越准确,结果的值越小(别忘了前面还有负号),最后求一个平均,得到我们想要的loss

注意!!!这个函数的返回值并不是一个数,而是一个向量,如果要求交叉熵,我们要再做一步tf.reduce_sum操作,就是对向量里面所有元素求和,最后才得到TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法,如果求loss,则要做一步tf.reduce_mean操作,对向量求均值!

理论讲完了,上代码

import tensorflow as tf
 
#our NN's output
logits=tf.constant([[1.0,2.0,3.0],[1.0,2.0,3.0],[1.0,2.0,3.0]])
#step1:do softmax
y=tf.nn.softmax(logits)
#true label
y_=tf.constant([[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]])
#step2:do cross_entropy
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#do cross_entropy just one step
cross_entropy2=tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits, y_))#dont forget tf.reduce_sum()!!
 
with tf.Session() as sess:
  softmax=sess.run(y)
  c_e = sess.run(cross_entropy)
  c_e2 = sess.run(cross_entropy2)
  print("step1:softmax result=")
  print(softmax)
  print("step2:cross_entropy result=")
  print(c_e)
  print("Function(softmax_cross_entropy_with_logits) result=")
  print(c_e2)

输出结果是:

step1:softmax result=
[[ 0.09003057 0.24472848 0.66524094]
[ 0.09003057 0.24472848 0.66524094]
[ 0.09003057 0.24472848 0.66524094]]
step2:cross_entropy result=
1.22282
Function(softmax_cross_entropy_with_logits) result=
1.2228

最后大家可以试试e^1/(e^1+e^2+e^3)是不是0.09003057,发现确实一样!!这也证明了我们的输出是符合公式逻辑的

到此这篇关于TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法的文章就介绍到这了,更多相关TensorFlow tf.nn.softmax_cross_entropy_with_logits内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python查询Mysql时返回字典结构的代码
Jun 18 Python
Python写的Tkinter程序屏幕居中方法
Mar 10 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
Python性能提升之延迟初始化
Dec 04 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
python中列表的含义及用法
May 26 Python
Python 忽略文件名编码的方法
Aug 01 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
Python OpenCV超详细讲解基本功能
Apr 02 Python
Python 匹配文本并在其上一行追加文本
May 11 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 #Python
TensorFlow打印输出tensor的值
Apr 19 #Python
numpy库reshape用法详解
Apr 19 #Python
tensorflow常用函数API介绍
Apr 19 #Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 #Python
pip安装tensorflow的坑的解决
Apr 19 #Python
查看已安装tensorflow版本的方法示例
Apr 19 #Python
You might like
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
jquery常用操作小结
2014/07/21 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python中Apriori算法实现讲解
2017/12/10 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
中学生团员自我评价分享
2013/12/07 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
企业法人授权委托书
2014/09/25 职场文书
企业法人代表证明书
2014/09/27 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android
Java完整实现记事本代码
2022/06/16 Java/Android