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的Django框架加载模版的方式
Jul 20 Python
通过源码分析Python中的切片赋值
May 08 Python
python和ruby,我选谁?
Sep 13 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python打印输出数组中全部元素
Mar 13 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
对python while循环和双重循环的实例详解
Aug 23 Python
Python实现CAN报文转换工具教程
May 05 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
python3实现简单飞机大战
Nov 29 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 和 HTML
2006/10/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
Javascript+CSS实现影像卷帘效果思路及代码
2014/10/20 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python字符串编码识别模块chardet简单应用
2015/06/15 Python
python的mysqldb安装步骤详解
2017/08/14 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
python 同时读取多个文件的例子
2019/07/16 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
国贸专业个人求职信范文
2014/01/08 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
中学教师请假制度
2014/02/03 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
房屋认购协议书
2015/01/29 职场文书
电影红河谷观后感
2015/06/11 职场文书
保外就医申请书范文
2015/08/06 职场文书
Echarts如何重新渲染实例详解
2022/05/30 Javascript