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 requests 测试代理ip是否生效
Jul 25 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
Python中pyecharts安装及安装失败的解决方法
Feb 18 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
python实现控制台输出颜色
Mar 02 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/04/09 魔兽争霸
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php二维数组排序详解
2013/11/06 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
28个JS验证函数收集
2010/03/02 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
React 高阶组件入门介绍
2018/01/11 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
django框架auth模块用法实例详解
2019/12/10 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
大学活动邀请函
2014/01/28 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
法制宣传日活动总结
2014/04/29 职场文书
市场营销调查计划书
2014/05/02 职场文书
诉前财产保全担保书
2014/05/20 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
红旗渠导游词
2015/02/09 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
pandas数值排序的实现实例
2021/07/25 Python