tf.nn.softman_cross_entropy_with_logits及几种交叉熵计算

2024-03-05 21:32

本文主要是介绍tf.nn.softman_cross_entropy_with_logits及几种交叉熵计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://www.jianshu.com/p/95d0dd92a88a 

就看例子就完事了  

tf.nn.softmax

import tensorflow as tf
import numpy as npsess=tf.Session()
#logits代表wx+b的输出,并没有进行softmax(因为softmax后是一个和为1的概率)
logits = np.array([[1, 2, 7],[3, 5, 2],[6, 1, 3],[8, 2, 0],[3, 6, 1]], dtype=np.float32)
#labels是[2,1,0,0,1]的ont-hot编码形式
labels = np.array([[0, 0, 1],[0, 1, 0],[1, 0, 0],[1, 0, 0],[0, 1, 0]], dtype=np.float32)# 公式计算,-np.log(y*softmax_out) 
# y=n*c,softmax_out是n*c,相当于将每个样本softmax的c个特征中最大的取出来,再取负就是求最小
softmax_out=tf.nn.softmax(logits)
cross_entropy1 = -tf.reduce_sum(labels * tf.log(softmax_out), axis=1)   #对应元素相乘,非矩阵乘法
print sess.run(cross_entropy1)#使用一维label计算,对每个样本取第k个元素出来,k代表实际类别
out_v = sess.run(out)
class_v = sess.run(classes)
cross_entropy1_label = -tf.log(out_v[range(len(logits)),class_v])print sess.run(cross_entropy1_label)#---输出
array([ 0.00917445,  0.16984604,  0.05498521,  0.00281022,  0.05498521], dtype=float32)

tf.nn.softmax_cross_entropy_with_logits与tf.nn.sparse_softmax_cross_entropy_with_logits


import tensorflow as tfsess=tf.Session()
#logits代表wx+b的输出,并没有进行softmax(因为softmax后是一个和为1的概率)
logits = np.array([[1, 2, 7],[3, 5, 2],[6, 1, 3],[8, 2, 0],[3, 6, 1]], dtype=np.float32)
#labels是[2,1,0,0,1]的ont-hot编码形式
labels = np.array([[0, 0, 1],[0, 1, 0],[1, 0, 0],[1, 0, 0],[0, 1, 0]], dtype=np.float32)cross_entropy2 = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels)
sess.run(cross_entropy2)classes = tf.argmax(labels, axis=1)    #array([2, 1, 0, 0, 1])
cross_entropy3 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=classes)
sess.run(cross_entropy2)#---cross_entropy2 输出
array([ 0.00917445,  0.16984604,  0.05498521,  0.00281022,  0.05498521], dtype=float32)A 1-D `Tensor` of length `batch_size` of the same type as `logits` with thesoftmax cross entropy loss.#---cross_entropy3 输出
array([ 0.00917445,  0.16984604,  0.05498521,  0.00281022,  0.05498521], dtype=float32)

1.tf.nn.softmax_cross_entropy_with_logits与tf.nn.sparse_softmax_cross_entropy_with_logits

输出结果相同,,后者的输入label shape=[batch_size],dtype=int32/int64,range=[0, number_classes-1];前者的label shape=[batch_size, number_classes], dtype=[float32/64]

2.tf.losses.softmax_cross_entropy和tf.losses.sparse_softmax_cross_entropy

都是用于计算不同样本的loss,

tf.losses.softmax_cross_entropy默认weight=1,等价于tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits)

weight为标量数字时,等价于w * tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits)

weights为向量时,计算出的每个Loss需乘上对应的样本权重再平均。

3.tf.losses.sparse_softmax_cross_entropy

等价于tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits).

这篇关于tf.nn.softman_cross_entropy_with_logits及几种交叉熵计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/777870

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

Java中InputStream重复使用问题的几种解决方案

《Java中InputStream重复使用问题的几种解决方案》在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主... 目录前言1. 使用mark()和reset()方法(适用于支持标记的流)2. 将流内容缓存到字节数组

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟