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实现过滤单个Android程序日志脚本分享
Jan 16 Python
举例讲解Python程序与系统shell交互的方式
Apr 09 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
Numpy一维线性插值函数的用法
Apr 22 Python
python 图像增强算法实现详解
Jan 24 Python
python爬虫框架feapde的使用简介
Apr 20 Python
Django使用channels + websocket打造在线聊天室
May 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
应届大学生的推荐信
2013/11/20 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP