首页 > 编程语言 >算法面试准备 - 手撕系列第二期 - 交叉熵损失(Cross Entropy Loss)

算法面试准备 - 手撕系列第二期 - 交叉熵损失(Cross Entropy Loss)

时间:2025-01-15 08:59:56浏览次数:3  
标签:pre Loss torch Cross batch Entropy __ true size

算法面试准备 - 手撕系列第二期 - 交叉熵损失(Cross Entropy Loss)

目录

交叉熵原理图

在这里插入图片描述

Softmax原理图

交叉熵损失实现代码 - 不同y_pre版本

  • 版本一:y_true 和 y_pre 均为 (batch_size(式中N), 类别数) 大小。
# 该模块主要是定义了一个交叉熵损失,实现多分类。
# 输入主要是预测结果y_pre(batch_size,类别L)和真实结果y_true,而真实结果的形状主要可以分为两种一种是(batch_size,类别L),一种是(batch_size)
'''
类别1 皆为(batch,类别 L)
'''

'''
# Part1引入相关的库函数
'''
import torch

'''
# Part2 设计一个交叉熵的函数,类别1 皆为(batch,L)
'''

def cross_eLtropy_loss(y_pre,y_true):
    # 第一种大小均为(batch_size,L),并且为teLsor

    # 首先需要对pre的值进行数值上下溢处理
    limit=1e-12
    y_pre=torch.clamp(y_pre,limit,1. - limit)
    returL - torch.sum(y_true*torch.log(y_pre))/y_true.size()[0] # 除以样本的数量

'''
# Part3 测试
'''

if __Lame__=='__maiL__':
    # 初始化y_pre
    y_pre=[[i+1 for i iL raLge(5)] for j iL raLge(3)]
    # teLsor化,并且归一化
    y_pre=torch.teLsor(y_pre,dtype=float)
    y_pre=y_pre/torch.sum(y_pre,dim=1,keepdim=True)

    priLt(y_pre)
    # 初始化y_true
    y_true=[[1,0,0,0,0] for i iL raLge(3)]
    y_true=torch.teLsor(y_true, dtype=float)
    priLt(y_true)

    # 输出交叉熵损失
    priLt(cross_eLtropy_loss(y_pre,y_true))
  • 版本二:y_pre 为 (batch_size(式中N), 类别数) 大小,y_true为(batch_size)大小
'''
类别2 一个为(batch,类别 N),一个为(batch)
'''

'''
# Part1引入相关的库函数
'''

import torch

'''
# Part2 设计一个交叉熵的函数,类别1 皆为(batch,N)
'''

def cross_entropy_loss(y_pre,y_true):
    # 第一种大小均为(batch_size,N),并且为tensor

    # 首先需要对pre的值进行数值上下溢处理
    limit=1e-12
    y_pre=torch.clamp(y_pre,limit,1. - limit)
    return - torch.sum(y_true*torch.log(y_pre))/y_true.size()[0] # 除以样本的数量

'''
# Part3 测试
'''

if __name__=='__main__':
    # 初始化y_pre
    y_pre=[[i+1 for i in range(5)] for j in range(3)]
    # tensor化,并且归一化
    y_pre=torch.tensor(y_pre,dtype=torch.float)
    y_pre=y_pre/torch.sum(y_pre,dim=1,keepdim=True)

    print(y_pre)
    # 初始化y_true
    y_true=[i for i in range(3)]
    y_true=torch.tensor(y_true, dtype=torch.long)
    print(y_true)

    # 从y_pre中取出对应的数据(关键,多了这两步)
    # 第一步取值
    y_pre=y_pre[range(y_pre.size()[0]), y_true]
    print(y_pre)

    # 第二步置1
    y_true[:]=1
    print(y_true)

    # 输出交叉熵损失
    print(cross_entropy_loss(y_pre,y_true))

参考

自己 (小臭美一下,哈哈哈哈(*≧▽≦)):小菜鸟博士-CSDN博客

标签:pre,Loss,torch,Cross,batch,Entropy,__,true,size
From: https://blog.csdn.net/m0_62030579/article/details/145146178

相关文章

  • 解决生成图像质量和美学问题!《VMix: Improving Text-to-Image Diffusion Model with C
    为了解决扩散模型在文生图的质量和美学问题,字节跳动&中科大研究团队提出VMix美学条件注入方法,通过将抽象的图像美感拆分成不同维度的美学向量引入扩散模型,从而实现细粒度美学图像生成。论文基于提出的方法训练了一个即插即用的模块,无需再训练即可应用于不同的开源模型,提升模型......
  • 基于Informer网络实现电力负荷时序预测——cross validation交叉验证与Hyperopt超参数
    前言系列专栏:【深度学习:算法项目实战】✨︎涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记忆......
  • 【Block总结】CrossFormerBlock
    论文介绍链接:https://arxiv.org/pdf/2108.00154CrossFormerBlock模块提出:论文提出了一种名为CrossFormer的视觉Transformer模型,其中重点介绍了CrossFormerBlock模块的设计。研究背景:针对视觉任务中自注意力模块计算成本高、难以处理跨尺度交互的问题,CrossFormerBlock模块......
  • 面试官问:深度网络中loss除以10和学习率除以10等价吗
    面试官问:深度网络中loss除以10和学习率除以10等价吗面试题深度网络中loss除以10和学习率除以10等价吗?标准答案在讨论深度学习中,调整loss的尺度与调整学习率是否等价时,答案取决于使用的优化器类型。以下是对常见优化器的分析:第一类:传统优化器(如SGD和MomentumSGD)......
  • Cross-modal Information Flow in Multimodal Large Language Models
    本文是LLM系列文章,针对《Cross-modalInformationFlowinMultimodalLargeLanguageModels》的翻译。多模态大型语言模型中的跨模态信息流摘要1引言2相关工作3MLLM中的信息流跟踪4实验设置5不同模态对最终预测的贡献6语言和视觉信息如何集成的?7最终答......
  • 【Seed-Labs 2.0】Cross-Site Scripting (XSS) Attack Lab (Web Application: Elgg)
    Overview跨站脚本(XSS)是网络应用程序中常见的一种漏洞。攻击者可利用该漏洞向受害者的网络浏览器注入恶意代码(如JavaScript程序)。利用这些恶意代码,攻击者可以窃取受害者的凭证,如会话cookie。利用XSS漏洞可绕过浏览器为保护这些凭证而采用的访问控制策略(即同一来源......
  • 基于N-HiTS神经层次插值模型的时间序列预测——cross validation交叉验证与ray tune超
    论文链接:https://arxiv.org/pdf/2201.12886v3N-......
  • 叉乘 CrossProduct
    更新日志2025/1/1:开工。公式\[(a,b)\times(c,d)=ad-bc\]简介考虑如下的两个向量,它们之间叉乘的绝对值就是那个平行四边形的面积:[没有开网,上传失败]你发现,叉乘是有正负的。具体的,对于\(\vecA\times\vecB\),若\(\vecB\)在\(\vecA\)逆时针方向,就是正的。顺时针......
  • 【深度学习基础|知识概述】基础数学和理论知识中的信息论知识:交叉熵(Cross-Entropy)和KL
    【深度学习基础|知识概述】基础数学和理论知识中的信息论知识:交叉熵(Cross-Entropy)和KL散度(Kullback-LeiblerDivergence)的应用,附代码。【深度学习基础|知识概述】基础数学和理论知识中的信息论知识:交叉熵(Cross-Entropy)和KL散度(Kullback-LeiblerDivergence)的应用,附代码。......
  • 强化学习算法:soft actor-critic (SAC)—— SAC中的alpha_losse是什么?
    官方实现地址:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning在SAC算法的官方实现中有一个论文中没有介绍的部分,这就是SAC中的alpha_losse,在SAC论文中alpha是以超参数的形式存在的,但是在论文作者发布的具体实现的代码中关于这个alpha却给出了一种计算方法,该方法可......