tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别
这两个函数的用法类似
sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None)
唯一的区别是sparse的labels是int类型,而非sparse的labels是one-hot类型。
具体代码用法
import tensorflow as tf#代码段1,手动算出代价函数
# 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
# 注意这里标签必须是浮点数,不然在后面计算tf.multiply时就会因为类型不匹配tf_log的float32数据类型而出错
y_ = tf.constant([[0, 0, 1.0], [0, 0, 1.0], [0, 0, 1.0]]) # 这个是稀疏的标签
# step2:do log
tf_log = tf.log(y)
# step3:do mult
pixel_wise_mult = tf.multiply(y_, tf_log)
# step4:do cross_entropy
cross_entropy = -tf.reduce_sum(pixel_wise_mult)#代码段2,使用tf.nn.softmax_cross_entropy_with_logits算出代价函数
cross_entropy2=tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_))#dont forget tf.reduce_sum()!! #代码段3,使用tf.nn.sparse_softmax_cross_entropy_with_logits()算出代价函数
# 将标签稠密化
dense_y = tf.arg_max(y_, 1)
cross_entropy3 = tf.reduce_sum(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=dense_y, logits=logits))#代码段4,验证结果
with tf.Session() as sess:result1,result2,result3 = sess.run((cross_entropy,cross_entropy2,cross_entropy3))print("method1 : %s" % result1)print("method2 : %s" % result2)print("method3 : %s" % result3)#输出结果'''method1 : 1.222818method2 : 1.2228179method3 : 1.2228179'''
参考
https://www.jianshu.com/p/648d791b55b0
https://blog.csdn.net/m0_37041325/article/details/77043598
记录时间
2018/9/11 21:28
tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别相关推荐
- tensorflow 的 Batch Normalization 实现(tf.nn.moments、tf.nn.batch_normalization)
tensorflow 在实现 Batch Normalization(各个网络层输出的归一化)时,主要用到以下两个 api: tf.nn.moments(x, axes, name=None, kee ...
- tf.nn.dropout和tf.keras.layers.Dropout的区别(TensorFlow2.3)与实验
这里写目录标题 场景:dropout和Dropout区别 问题描述: 结论: 深层次原因:dropout是底层API,Dropout是高层API 场景:dropout和Dropout区别 全网搜索tf ...
- 深度学习-函数-tf.nn.embedding_lookup 与tf.keras.layers.Embedding
embedding函数用法 1. one_hot编码 1.1. 简单对比 1.2.优势分析: 1.3. 缺点分析: 1.4. 延伸思考 2. embedding的用途 2.1 embedding有两个 ...
- 【TensorFlow】TensorFlow函数精讲之tf.nn.max_pool()和tf.nn.avg_pool()
tf.nn.max_pool()和tf.nn.avg_pool()是TensorFlow中实现最大池化和平均池化的函数,在卷积神经网络中比较核心的方法. 有些和卷积很相似,可以参考TensorFlow ...
- TensorFlow基础篇(六)——tf.nn.max_pool()和tf.nn.avg_pool()
tf.nn.max_pool()和tf.nn.avg_pool()是TensorFlow中实现最大池化和平均池化的函数,在卷积神经网络中比较核心的方法. 有些和卷积很相似,可以参考TensorFlow ...
- TensorFlow 辨异 —— tf.add(a, b) 与 a+b(tf.assign 与 =)、tf.nn.bias_add 与 tf.add
1. tf.add(a, b) 与 a+b 在神经网络前向传播的过程中,经常可见如下两种形式的代码: tf.add(tf.matmul(x, w), b) tf.matmul(x, w) + b 简而 ...
- tf.nn.batch_normalization() 和 tf.layer.batch_normalization()
前提基本知识: 均值: μ=x1+x2+x3+...+xnn\mu = \frac{x_1 + x_2 + x_3 + ...+x_n}{n}μ=nx1+x2+x3+...+xn 方差: σ ...
- tf.nn.conv2d和tf.contrib.slim.conv2d的区别
转自:http://blog.sina.com.cn/s/blog_6ca0f5eb0102wsuu.html 文中摘要: " 在上述的API中,可以看出去除掉初始化的部分,那么两者并没有什 ...
- TensorFlow学习——tf.nn.conv2d和tf.contrib.slim.conv2d的区别
在查看代码的时候,看到有代码用到卷积层是tf.nn.conv2d,也有的使用的卷积层是tf.contrib.slim.conv2d,这两个函数调用的卷积层是否一致,在查看了API的文档,以及slim. ...
最新文章
- 资源管理器方法访问FTP服务
- 过程化技术:打造「开放世界」的秘密
- Python3爬虫之中文乱码问题分析与解决方法
- java servlet接口开发_servlet三种实现方式之一实现servlet接口
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
- react脚手架 显示npm不知内部命令_第一章 React开发环境搭建
- error: command 'gcc' failed with exit status 1
- mysql 大表更新数据类型_MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)...
- 《重构-改善既有代码的设计》学习笔记----Extract Method(提炼函数)
- 微信中直接打开手机系统浏览器的实现
- 重装机兵3 完美攻略修正版
- ic启动器我的世界_hmcl启动器下载-我的世界HMCL启动器下载 v3.3.172官方最新版--pc6下载站...
- java怎么打印课程表_自明排课系统如何打印?教你打印课表的方法
- 系统集成项目管理之何为系统集成
- python取数组最后一个元素_python数组最后一个元素
- 济南市全国计算机二级,山东省济南市2019年下半年全国计算机等级考试报名时间...
- 给IOS初学者及新手的建议
- SpringBoot项目入门,前端thymeleaf,后端Java,数据库Jpa+MySQL
- np.arange函数的使用
- 秀米中如何添加链接、文件链接、小程序链接?