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之集合(set)
Sep 24 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
通过C++学习Python
Jan 20 Python
Python中Continue语句的用法的举例详解
May 14 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
python speech模块的使用方法
Sep 09 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php实现监听事件
2013/11/06 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
php常量详细解析
2015/10/27 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
php实现的生成排列算法示例
2019/07/25 PHP
解放web程序员的输入验证
2006/10/06 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
Python创建系统目录的方法
2015/03/11 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
大学生最新职业生涯规划书范文
2014/01/12 职场文书
5s推行计划书
2014/05/06 职场文书
捐款活动总结
2014/08/27 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
辩论赛新闻稿
2015/07/17 职场文书
单位提档介绍信
2015/10/22 职场文书