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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
python连接MySQL数据库实例分析
May 12 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
python 录制系统声音的示例
Dec 21 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
详解Python requests模块
Jun 21 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
PHP完整的日历类(CLASS)
2006/11/27 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
javascript 函数参数限制说明
2010/11/19 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
wxpython实现图书管理系统
2018/03/12 Python
python3实现磁盘空间监控
2018/06/21 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
人事专员的职责
2014/02/26 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
Python OpenCV实现图形检测示例详解
2022/04/08 Python