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中degrees()方法的使用
May 18 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
python代码实现ID3决策树算法
Dec 20 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
python中的for循环
Sep 28 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
wxpython布局的实现方法
Nov 01 Python
Python中包的用法及安装
Feb 11 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 at(@)符号的用法简介
2009/07/11 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
js constructor的实际作用分析
2011/11/15 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
Python中关于使用模块的基础知识
2015/05/24 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
深入解析Python编程中super关键字的用法
2016/06/24 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python内存管理实例分析
2019/07/10 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
小学门卫岗位职责
2013/12/17 职场文书
买卖车协议书
2014/04/21 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
山楂树之恋观后感
2015/06/11 职场文书
社团招新宣传语
2015/07/13 职场文书
课程设计感想范文
2015/08/11 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书