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 相关文章推荐
在Django框架中编写Contact表单的教程
Jul 17 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
python执行精确的小数计算方法
Jan 21 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
浅析Python 字符编码与文件处理
Sep 24 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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
PHP常用代码
2006/11/23 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
python两个list[]相加的实现方法
2020/09/23 Python
python 决策树算法的实现
2020/10/09 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
竞职演讲稿范文
2014/01/11 职场文书
火锅店创业计划书范文
2014/02/02 职场文书
广告创意求职信
2014/03/17 职场文书
经营理念标语
2014/06/21 职场文书
小学生植树节活动总结
2014/07/04 职场文书
结婚通知短信大全
2015/04/17 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
杨善洲观后感
2015/06/04 职场文书
中学教师读书笔记
2015/07/01 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang