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 23 Python
Python实现简单过滤文本段的方法
May 24 Python
Anaconda入门使用总结
Apr 05 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
python3.7.0的安装步骤
Aug 27 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
微信小程序python用户认证的实现
Jul 29 Python
Golang GBK转UTF-8的例子
Aug 26 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
Python实现仿射密码的思路详解
Apr 23 Python
python实现在内存中读写str和二进制数据代码
Apr 24 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
无线电的诞生过程
2021/03/01 无线电
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP图片水印类的封装
2017/07/06 PHP
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
numpy.linspace函数具体使用详解
2019/05/27 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
会计岗位职责
2013/11/08 职场文书
给校长的一封建议书
2014/03/12 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
委托书英文
2015/01/28 职场文书
体育教师个人工作总结
2015/02/09 职场文书