tensorflow中交叉熵系列函数总结

猫狗大战——基于TensorFlow的猫狗识别(3) 在利用tensorflow实现摸狗分类时,最重要的就是设计模型,这里是小玉的模型,你看看可还行? 阅读详情
import tensorflow as tf
import numpy as np

sess = tf.InteractiveSession()

分类标签用one hot向量表示,1的下标就是类别号。是一个shape=(None, num_classes)向量。这种类别表示法用于函数tf.nn.softmax_cross_entropy_with_logits。

labels = np.array([[0, 0, 1],
                   [0, 1, 0],
                   [1, 0, 0],
                   [1, 0, 0],
                   [0, 1, 0]], dtype=np.float32)

logits数据,就是神经网络中的 X \cdot W 的结果。是网络的一次前向传播输出不带非线性函数的结果。

logits = np.array([[1, 2, 7],
                   [3, 5, 2],
                   [6, 1, 3],
                   [8, 2, 0],
                   [3, 6, 1]], dtype=np.float32)

类别数:

num_classes = labels.shape[1]

tf.nn.softmax中dim默认为-1,即,tf.nn.softmax会以最后一个维度作为一维向量计算softmax

predicts = tf.nn.softmax(logits=logits, dim=-1)

观察softmax输出的predicts可知,softmax能够放大占比重较大的项。

注意:tf.nn.softmax函数默认(dim=-1)是对张量最后一维的shape=(p,)向量进行softmax计算,得到一个概率向量。不同的是,tf.nn.sigmoid函数对一个张量的每一个标量元素求得一个概率。也就是说tf.nn.softmax默认针对1阶张量进行运算,可以通过指定dim来针对1阶以上的张量进行运算,但不能对0阶张量进行运算。而tf.nn.sigmoid是针对0阶张量,。


将one hot编码的标签转换为类别数字,得到一个shape=(None,)的张量。

这种类别表示法用于函数tf.nn.sparse_softmax_cross_entropy_with_logits。

# 顺着列(axis=1)的方向取得所有列相应的分量的最大值的下标
# 返回的是一个shape=(len(labels),)的向量
classes = tf.argmax(labels, axis=1)

手动求交叉熵:

labels = tf.clip_by_value(labels, 1e-10, 1.0)
predicts = tf.clip_by_value(predicts, 1e-10, 1.0)
cross_entropy = tf.reduce_sum(labels * tf.log(labels/predicts), axis=1)

用tf.nn.softmax_cross_entropy_with_logits求交叉熵:

labels参数的shape=(None,num_classes),在本例中即labels。

cross_entropy2 = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=labels)

用tf.nn.sparse_softmax_cross_entropy_with_logits求交叉熵:

其labels参数的shape=(None,)的向量,在本例中即classes。

cross_entropy3 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, \
                                                                labels=classes)


以上三个交叉熵的输出结果为shape=(None,)的相同的交叉熵向量。即,None个概率向量对的交叉熵构成的向量。

下面说说tf.nn.sigmoid_cross_entropy_with_logits:

不同于softmax系列函数是张量中向量与向量间的运算。sigmoid_cross_entropy_with_logits函数则是张量中标量与标量间的运算。

z = 0.8
x = 1.3
cross_entropy4 = tf.nn.sigmoid_cross_entropy_with_logits(labels=z, logits=x)
# tf.nn.sigmoid_cross_entropy_with_logits的具体实现:
cross_entropy5 = - z * tf.log(tf.nn.sigmoid(x)) \
                 - (1-z) * tf.log(1-tf.nn.sigmoid(x))

cross_entropy4 与cross_entropy5 的值是相等的。sigmoid_cross_entropy_with_logits的具体实现就是 entropy = -z\cdot log(\sigma(x))-(1-z)\cdot log(1-\sigma(x))

其中 z 就是labels,是一个概率值。 x 是logits, \sigma(x) 才是概率。sigmoid_cross_entropy_with_logits函数求的就是两点分布 B(1, z) 和两点分布 B(1,\sigma(x)) 之间的交叉熵。

如果sigmoid_cross_entropy_with_logits的labels和logits是相同shape的张量,输出结果则是与labels和logits有相同shape的张量。张量的每个元素都是labels和logits相对的值捉对按上述方法计算出来的交叉熵。


注:tensorflow的cross_entropy系列函数求交叉熵时用的都是以 e 为底的对数。

[TensorFlow] 交叉熵损失函数,加权交叉熵损失函数 写在前面 在文章[TensorFlow] argmax, softmax_cross_entropy_with_logits, sparse_softmax_cross_entropy_with_logits函数详解中,提到了交叉熵损失函数的计算方式以及tensorflow中的输入和输出等。本篇文章会更细地讲一下tensorflow中交叉熵损失函数的应用,以及在优化过程中可能用到加权交叉熵损失函数的使用方式。 一、基础计算 当存在多个类别时,通常使用交叉熵损失函数来衡量模型的效果,也是对模型调参的重要依据, 阅读详情

相关推荐

CrossEntropy交叉熵损失函数及softmax函数的理解

参考链接1 参考链接2 参考链接3 (一)什么是Sigmoid函数和softmax函数? 1、提到二分类问题容易想到逻辑回归算法,而逻辑回归算法最关键的步骤就是将线性模型输出的实数域映射到[0, 1]表示概率分布的有效实数空间,其中Sigmoid函数和softmax函数刚好具有这样的功能。 2、Sigmoid函数 当分类结果可以只用一个节点表述时,使用Sigmoid函数: ...

qq_44629163的博客 1万+

shape = (None,3)与shape = (3,)讲解

shape = (None,3)返回的是一个二维的shape,而shape=(3,)返回的是一个一位的3个数值的shape

小姑仔的博客 4389

Tensorflow,用tf.while_loop编辑shape为None的tensor的每个值

tf.while_loop

开卷有益 848

【tf学习笔记2】tensorflow2.3张量中None占位符问题-搭建注意力模块SE-Net

tensorflow2.3keras搭建SE-Net遇到问题。 与reshape中的None占位符有关。Failed to convert object of type to Tensor.

qq_53383206的博客 807

TensorFlow2 入门指南 | 09 损失函数、梯度下降、优化器选择

《TensoeFLow2从零到一》,深度学习工程师的快速入门指南!

不积跬步,无以至千里! 2026

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系:rl命名空间下,主要有八大模块。搞定VS后将逐个拆解。

qq_34839823的博客 1736

如何对shape为None的张量使用tf.random

背景 tensorflow中需要对张量x添加噪声,x是占位符,其shape的第一维为None(即我们的batch_size不固定),若直接使用noise = tf.random_uniform(shape=(None, 2),报错“TypeError: Failed to convert object of type <class ‘tuple’> to Tensor. Contents: (None, 2). Consider casting elements to a supported t

qq_43015237的博客 2057

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 327

深度学习笔记 (二) 在TensorFlow上训练一个多层卷积神经网络

上一篇笔记主要介绍了卷积神经网络相关的基础知识。在本篇笔记中,将参考TensorFlow官方文档使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络。 下载并导入mnist数据集 首先,利用input_data.py来下载并导入mnist数据集。在这个过程中,数据集会被下载并存储到名为"MNIST_data"的目录中。 import input_data mnist = inpu...

weixin_30815427的博客 392

手把手教你用srec_cat生成带CRC校验的STM32固件(解决OTA常见校验失败问题)

本文针对STM32 OTA升级中常见的固件校验失败问题,提供了一套使用srec_cat工具自动生成带CRC32校验固件的实战解决方案。文章详细拆解了命令参数,指导开发者如何为固件嵌入CRC值、处理地址偏移及合并文件,从而确保Bootloader能可靠校验固件完整性,提升远程更新的稳定性。

kappa的博客 783

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

tensorflow的交叉熵函数_tensorflow中交叉熵系列函数

import tensorflow as tfimport numpy as npsess = tf.InteractiveSession()分类标签用one hot向量表示,1的下标就是类别号。是一个shape=(None, num_classes)向量。这种类别表示法用于函数tf.nn.softmax_cross_entropy_with_logits。labels = np.array([[...

weixin_39890543的博客 195

【Unity的HDRP渲染管线下用Steam VR串流结合使用遇到的各种问题_SteamVR 插件和Pico串流助手】

当你启用"Mock Runtime"选项后,Unity将模拟一个虚拟的OpenXR运行时环境,并提供一些虚拟的设备和功能,让你能够进行开发和调试。在Unity中,SteamVR插件是一个由Valve提供的Unity插件,它允许开发者在Unity项目中集成SteamVR功能,以便支持SteamVR设备。OpenXR是一个跨平台的虚拟和增强现实(VR/AR)开发接口,它为开发者提供了一个统一的接口,用于访问不同VR/AR硬件设备和平台的功能。这个选项是用于模拟OpenXR运行时环境的功能。

暴走约伯的博客 2799

tensorflow中交叉熵系列函数

原文:https://zhuanlan.zhihu.com/p/27842203 import tensorflow as tf import numpy as np sess = tf.InteractiveSession() 分类标签用one hot向量表示,1的下标就是类别号。是一个shape=(None, num_classes)向量。这种类别表示法用于函数tf.nn.softm...

evergreenswj的博客 241

【StreamSet】ETL之StreamSet之Pipelines的状态监听之WebHook钉钉篇

介绍下StreamSets的状态监听以及钉钉的webhook的互联,这位博友问的恰是时候,不久前我刚刚对接过钉钉的机器人,这次看到这个问题,对我来说,应该轻车熟路了,那就有了这篇博文,状态监听之钉钉篇。...

m0_54252387的博客 487

CloudCompare 二次开发(35)——提取多条直线

使用CloudCompare与PCL编程实现的多条空间直线的提取。

点云侠的博客 437

【TensorFlow系列二】经典损失函数(交叉熵、均方差)

↑ 点击上方【计算机视觉联盟】关注我们1、交叉熵交叉熵是分类问题中使用比较广的一种损失函数,刻画了两个概率分布之间的距离。给定两个概率分布p和q,通过q来表示p的交叉熵为:交叉熵刻画的是...

中科院AI算法工程师的博客 631

零基础快速学习 ABAP 读者意见反馈和下一步写作计划表

大家在学习教程过程中,如果有任何关于 SAP ABAP 开发方面想了解的内容,可以直接在教程各篇文章下评论留言,我会将大家的意见统一汇总到下面的表格,作为我更新教程的内容参考来源之一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4269

【TensorFlow】TensorFlow从浅入深系列之六 -- 教你深入理解经典损失函数(交叉熵、均方误差)

本文是《TensorFlow从浅入深》系列之第6篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维导图深度理解深层神经网络 TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别 TensorFlow从浅入深系列之四 -- 教你深入理解过拟合问题(正则化) TensorFlow从浅入...

中科院AI算法工程师的博客 1438

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习基础系列(五)| 深入理解交叉熵函数及其在tensorflow和keras中的实现...

  在统计学中,损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数。假设某样本的实际输出为a,而预计的输出为y,则y与a之间存在偏差,深度学习的目的即是通过不断地训练迭代,使得a越来越接近y,即 a - y→0,而训练的本质就是寻找损失函数最小值的过程。   常见的损失函数为两种,一种是均方差函数,另一种是交叉熵函数。对于深度学习而言,交叉熵函数要优于...

weixin_34177064的博客 335

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TensorFlow的reduce_sum()函数

日期:2017.5.20导师让下周二之前用TensorFlow把MNIST跑通,今天看源码碰到这么一行,发现TensorFlow里面的求和函数和其他语言差别挺大,便记录下来。import tensorflow as tf...# 交叉熵评估代价 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indice

Sual 5万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Tensorflow中常用函数以及常见名词定义讲解

Tensorflow详解 Tensorflow官方文档:https://www.w3cschool.cn/tensorflow_python/ 目录 Tensorflow详解 一.Tensorflow中常用函数讲解 1. tf.nn.softmax_cross_entropy_with_logits() 交叉熵 2. tf.arg_max()函数 3. tf.equal()函数 4...

sunprice的博客 1632

TensorFlow基础系列(逻辑回归)

开篇 接触TensorFlow也差不多一年多,因为论文的实验需要,中间间间断断的学习,东西或多或少会有所遗忘,所以着手开始写这一系列博客,希望能够坚持,磨炼技术,也为9月份的秋招打好扎实的基础。 那么这一系列博客能够让你学到什么呢,首先是tensorflow的基本操作,之后我们会用tensorflow实现一系列机器学习和深度学习的算法,深度学习优先,因为它毕竟是深度学习框架。本系列代码以代码为...

Ding_xiaofei的博客 623

tensorflow API r1.0

本文档记录了在学习 tensorflow 过程中对 tensorflow API r1.0 及以上版本中一些函数的总结

CristianoJason的博客 1757

深层神经网络实现--step by step 入门TensorFlow(二)

我们将采用Jupyter notebook交互式编程的方式,通过一步步代码的讲解,学习Tensorflow 编程。推荐使用Jupyter notebook作为开发环境按照文中的代码step by step 的学习。

知行_那片天 1470

[ML&DL]tensorflow学习2

手写数字识别 MNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门样例。而TensorFlow的封装让使用MNIST数据集变得更加方便。MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。在MNIST数据集中的每一张图片都代表了0~9中的一个数字。图片的大小都为28*28,且数字都会出现在图片...

DongGang0907的博客 194
上一篇: conda常见命令
下一篇: Anaconda已经安装过PIL/pillow和captcha等模块仍然报错ImportError: No module named 'captchaXXX'
冰冰火
博客等级 码龄11年 19粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值