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中的字符串查找操作方法总结
Jun 27 Python
python机器学习之决策树分类详解
Dec 20 Python
使用python3+xlrd解析Excel的实例
May 04 Python
深入浅析Python的类
Jun 22 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
python实现超市商品销售管理系统
Oct 25 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
python中有关时间日期格式转换问题
Dec 25 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
jupyter notebook 的工作空间设置操作
Apr 20 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批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
jQuery 解析xml文件
2009/08/09 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
Python基于pillow判断图片完整性的方法
2016/09/18 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
实例详解Python模块decimal
2019/06/26 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
python 读取串口数据的示例
2020/11/09 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
保密工作责任书
2014/04/16 职场文书
秋天的图画教学反思
2014/05/01 职场文书
经济管理专业求职信
2014/06/09 职场文书
装配出错检讨书
2014/09/23 职场文书
学校运动会报道稿
2014/09/23 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang