TensorFlow中的tf.nn.softmax_cross_entropy_with_logits_v2函数详解

news2025/3/1 14:23:39

一、函数介绍

函数形式:tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=logits)

  • 需要注意的是,此处是最常见的参数形式,即只有labels和logits参数。为了简单起见,这里不对其他参数进行赘述。
  • 其中,logits为神经网络最后一层的输出labels为对应的标签一般为one-hot编码形式即只对真实标签对应的logits分量进行交叉熵损失的计算

事实上,labels也不一定非得是one-hot编码形式;实际上,如果labels和logits维度大小相同,不管labels是不是one-hot编码,代码都可以正常运行,只是没什么意义罢了。一般情况下,建议大家都用one-hot编码形式的labels进行计算。

二、实例讲解

下面,采用非one-hot编码形式的labels对tf.nn.softmax_cross_entropy_with_logits_v2函数进行过程分析,如果非one-hot编码形式的计算过程都能理解,那么one-hot编码形式的计算过程就更清楚了。

简单来说,该函数内部会首先对logits分量进行softmax处理,之后再按照交叉熵损失的公式进行计算。

# 参考链接:
# https://blog.csdn.net/sdnuwjw/article/details/86086377
# https://blog.csdn.net/Muzi_Water/article/details/81363027
# https://www.cnblogs.com/peixu/p/13201093.html
# https://blog.csdn.net/qq_39208832/article/details/117415229
import math
import torch
import torch.nn as nn
import tensorflow as tf

labels = [[0, 1, 2], [0, 1, 3], [1, 0, 2]]
logits = tf.constant(value=[[0.8, 0.3, 0.4], [0, 0.8, 0.3], [0, 0.7, 0.3]],
                     dtype=tf.float32, shape=[3, 3])

loss = tf.nn.softmax_cross_entropy_with_logits_v2(labels=labels, logits=logits)
# loss_mean = tf.reduce_mean(loss)

with tf.Session() as sess:
    print('labels:',labels)
    print('logits:\n',sess.run(logits))
    print('loss:',sess.run(loss))
    # print('loss_mean:',sess.run(loss_mean))

print("-----------------------------------")
print(nn.Softmax(dim=1)(torch.tensor([[0.8, 0.3, 0.4]])))
print(-math.log(0.2664)-2*math.log(0.2944))
print(nn.Softmax(dim=1)(torch.tensor([[0, 0.8, 0.3]])))
print(-math.log(0.4864)-3*math.log(0.2950))
print(nn.Softmax(dim=1)(torch.tensor([[0, 0.7, 0.3]])))
print(-math.log(0.2292)-2*math.log(0.3093))

在这里插入图片描述

注意:

1.tf.nn.softmax_cross_entropy_with_logits和tf.nn.softmax_cross_entropy_with_logits_v2用法没什么区别,至少对于上面这个例子是这样的。大家可以把上述例子中的函数改为tf.nn.softmax_cross_entropy_with_logits试试,可以看到,输出结果并不会发生什么变化。
2.一般,在用该函数进行交叉熵损失求解时,会进行如下设定:
cross_entropy_loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=labels)),即对一个batch中的样本的损失求均值。事实上,Pytorch中的交叉熵损失计算公式nn.CrossEntropyLoss()默认对batch内的样本损失进行求均值处理;而TensorFlow中的tf.nn.softmax_cross_entropy_with_logits_v2并没有默认对batch内的样本的损失进行均值处理,所以需要手动进行均值处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AtCoder】离线询问+树状数组

文章目录题目描述题意思路代码D - AtCoder Express 2 题目描述 input#1: 2 3 1 1 1 1 2 2 2 1 2 output#1: 3 input#2: 10 3 2 1 5 2 8 7 10 1 7 3 10 output#2: 1 1 input#3: 10 10 10 1 6 2 9 4 5 4 7 4 7 5 8 6 6 …

【虹科案例】极高的精度水平——虹科数字化仪在大型强子对撞机机器保护系统中的应用

大型强子对撞机机器保护系统 CERN(欧洲核子研究中心) 的大型强子对撞机 (LHC) 的机器保护系统中使用了140 多张虹科数字化仪卡。这些板卡用于检查粒子束是否已准确偏转。这需要极高的精度,因为在 27 公里 LHC 加速器环中,两束高能…

19182 石子合并(基础版)

题目 19182 石子合并(基础版) 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: 不限定 Description 设有 N(N≤300) 堆石子排成一排,其编号为1,2,3,⋯,N。每堆石子有一定的质量 mi(mi≤1000)。 现在要将这N堆…

什么是JavaScript一文教会你

目录 文章目录**二、什么是JavaScript,有什么用?**三、HTML嵌入JavaScript的方式:第一种方式:第二种方式:第三种方式:四、JavaScript的变量五、函数初步**函数参数中的几个场景****情景1:传入参数不足****…

MyBatis--自定义映射resultMap

1.处理下划线与属性名不一致的方法 字段名和属性名不一致的情况 , 如何处理映射关系 解决方法 : 1. 为查询的字段设置别名 , 和属性名保持一致 例 : selectemp_id empId , emp_name empName , age , genderfromt_emp where emp_id #{empId} 2. 当字段符合MySql 的要求使用 _…

软文发布推广需要注意的问题有哪些

随着互联网的发展,软文发稿这种以文章为载体、并带有很强隐蔽性的广告形式也得到了飞速发展,这种营销形式实际上具有非常广泛的传播性、并兼具成本低、权威性等优势,可有效帮助企业实现品牌的宣传推广、提升产品的销售转化率。那么软文发稿需…

上海亚商投顾:沪指探底回升 供销社、新冠检测概念领涨

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪A股今日小幅调整,三大指数盘初均跌超1%,随后震荡回升跌幅收窄,创业板指一度接近…

Android 发布自己的sdk

作为一个开发,总是会跟开源组件打交道,现在记下我自己写的开源组件遇到的问题 1.创建一个Android Library 2.修改build.gradle plugins {id com.android.application } 里面的id com.android.application 改为 id com.android.library android {compileSdk 32defaultConf…

艾美捷Immunochemistry FAM-FLICA Caspase-1检测方案

Caspases在细胞凋亡和炎症中发挥重要作用。ICT的FLICA检测试剂盒被研究人员用于通过培养的细胞和组织中的胱天蛋白酶活性来定量凋亡。 艾美捷Immunochemistry FAM FLICA Caspase-1探针允许研究人员评估Caspase-1的激活。FLICA试剂FAM-YVAD-FMK进入每个细胞,并不可逆…

【第十二篇】Camunda系列-事件篇-信号事件

信号事件 1. 开始事件 通过信号来启动流程实例 部署流程和发送信号来启动流程 /*** 部署流程*/@Testpublic void deployFlow(){Deployment deploy = repositoryService.createDeployment(<

2022卡塔尔世界杯:TikTok卖家如何把握这四年一度的营销机遇?

2022卡塔尔世界杯已正式开幕&#xff0c;这四年一度规模最大的足球赛事&#xff0c;也是全民体育狂欢节。这样的高关注度&#xff0c;必然会带来高流量&#xff0c;而流量就是金钱。没有卖家能在如此巨大的流量面前无动于衷&#xff0c;尤其是运动类品牌。TikTok作为世界杯流量…

海绵城市解决方案-最新全套文件

海绵城市解决方案-最新全套文件一、建设背景1、建设海绵城市主要有三个意义&#xff1a;2、当前我国海绵城市建设面临的困境二、建设架构三、建设方案1、“渗”&#xff1a;能把更多的雨水渗透到城市的地下储存起来2、“滞”&#xff1a;不能让雨水很快流走&#xff0c;也是要把…

不懂23种设计模式?别灰心,这份核心笔记来帮你,你想知道的都在这里!

设计模式是软件工程中各种常见问题的经典解决方案&#xff0c;设计模式不只是代码&#xff0c;而是组织代码的方式。假设一行行的代码是砖&#xff0c;设计模式就是蓝图。 什么是设计模式 设计模式是解决问题的一种思想&#xff0c;和语言无关。在面向对象软件设计的工程中&am…

Elasticsearch(macbook搭建,Elasticsearch+kibana)一步到位

Elasticsearch安装 首先在官网下载一下ES的压缩包&#xff1a;&#xff08;我是m1的各位自己看着下&#xff09;Download Elasticsearch | Elastic jdk&#xff0c;要有的&#xff01;不会自自己百度一下最好1.8的 &#xff08;你环境变设成全局的&#xff09;放在哪里不重要…

SPARKSQL3.0-Analyzer阶段源码剖析

一、前言 在上一节【SPARKSQL3.0-Unresolved[Parsed]阶段源码剖析】中已经介绍了Unresolved Logical Plan未解析阶段&#xff0c;建议先看完上一篇文章后再来看本文 由于Unresolved LogicalPlan阶段生成的logicalPlan仅仅是一种数据结构&#xff0c;不包含任何数据信息。故在…

ggplot2 | 世界杯赛程的可视化就交给我吧!~

11. 写在前面 昨天卡塔尔&#x1f1f6;&#x1f1e6;输了比赛真是让人大跌眼镜啊&#x1f631;&#xff0c;打破了世界杯东道主必胜的神律&#xff0c;也不知道王子们是怎么想的。&#x1f923; 今天是英格兰&#x1f3f4;&#xe0067;&#xe0062;&#xe0065;&#xe006e…

Linux 调试之strace

文章目录前言一、strace 例子1.1 strace 跟踪 free1.2 strace 跟踪 dd1.3 strace 其他一些使用选项二、strace 原理2.1 ptrace简介2.2 strace 原理总结参考资料前言 strace命令是Linux系统调用跟踪器&#xff0c;可以跟踪系统调用&#xff0c;为每个系统调用打印一行信息&…

浅谈SQL Server索引视图(物化视图)以及索引视图与查询重写

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 物化视图&#xff08;索引视图&#xff09;与查询重写的基本概念 2. 创建测试环境 &#xff08;1&#xff09;建表 &#xff08;2&#xff09;写数据 3. 索引视图创建 &#xff08;1&#xff0…

一篇文章详解Linux的用户和权限

教程推荐&#xff1a;Linux零基础快速入门到精通 认知root用户 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 •在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&a…

第十七届全国人机语音通讯学术会议(NCMMSC 2022) | 早鸟票开放注册了

全国人机语音通讯学术会议是国内语音领域广大专家、学者和科研工作者交流最新研究成果&#xff0c;促进该领域研究和开发工作不断进步的重要舞台。该系列会议自1990年开创以来已成功召开了十六届。2022年第十七届全国人机语音通讯学术会议&#xff08;National Conference on M…