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每隔N秒运行指定函数的方法
Mar 16 Python
使用Python的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
Python打印斐波拉契数列实例
Jul 07 Python
详解Python验证码识别
Jan 25 Python
Python中函数及默认参数的定义与调用操作实例分析
Jul 25 Python
Python中join函数简单代码示例
Jan 09 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
如何在mac下配置python虚拟环境
Jul 06 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
使用python如何删除同一文件夹下相似的图片
May 07 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
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
python无序链表删除重复项的方法
2020/01/17 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
2013年员工自我评价范文
2013/12/27 职场文书
重阳节登山活动方案
2014/02/03 职场文书
家长评语和期望
2014/02/10 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
学生会工作感言
2015/08/07 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
初中物理教学反思
2016/02/19 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书