神经网络中的损失函数:常见类型与应用场景(代码演示)

作者:fyakm日期:2025/10/2

在神经网络的世界里,损失函数是一个非常重要的概念。它就像是一个“裁判”,能够衡量模型预测结果与真实结果之间的差距。通过了解损失函数的常见类型和应用场景,我们可以根据不同的需求选择合适的损失函数,从而避免因损失函数选择不合理导致的模型性能不佳问题。接下来,我们就一起深入了解一下损失函数的相关知识,并通过Python代码来演示不同损失函数的计算和效果。

目录

      • 损失函数的类型和应用场景
          • 均方误差损失函数(Mean Squared Error, MSE)
            * 交叉熵损失函数(Cross - Entropy Loss)
            * Huber损失函数
        • 代码演示总结

损失函数的类型和应用场景

均方误差损失函数(Mean Squared Error, MSE)
  • 核心要点:均方误差损失函数是最常用的损失函数之一,它计算的是预测值与真实值之间误差的平方的平均值。
  • 具体解释:简单来说,就是先计算每个样本预测值和真实值的差值,然后将这些差值平方,再求平均值。这个平均值越小,说明模型的预测结果越接近真实值。
  • 应用场景:常用于回归问题,比如预测房价、股票价格等连续值的场景。因为在这些场景中,我们希望模型的预测值尽可能接近真实值,而均方误差能够很好地衡量这种接近程度。
  • 代码示例
1import numpy as np
2
3# 真实值
4y_true = np.array([1, 2, 3, 4, 5])
5# 预测值
6y_pred = np.array([1.2, 1.8, 3.2, 3.8, 5.1])
7
8# 计算均方误差
9mse = np.mean((y_true - y_pred) ** 2)
10print("均方误差:", mse)
11
交叉熵损失函数(Cross - Entropy Loss)
  • 核心要点:交叉熵损失函数主要用于分类问题,它衡量的是两个概率分布之间的差异。
  • 具体解释:在分类问题中,模型输出的是每个类别的概率,而真实标签也是以概率分布的形式表示(比如独热编码)。交叉熵损失函数通过比较这两个概率分布的差异来评估模型的性能。差异越小,损失值越小,说明模型的预测越准确。
  • 应用场景:广泛应用于图像分类、文本分类等分类任务中。例如,在图像分类中,我们希望模型能够准确地将图像分类到不同的类别中,交叉熵损失函数可以很好地帮助我们实现这一目标。
  • 代码示例
1import numpy as np
2from sklearn.metrics import log_loss
3
4# 真实标签(独热编码)
5y_true = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
6# 预测概率
7y_pred = np.array([[0.8, 0.1, 0.1], [0.2, 0.7, 0.1], [0.1, 0.2, 0.7]])
8
9# 计算交叉熵损失
10cross_entropy = log_loss(y_true, y_pred)
11print("交叉熵损失:", cross_entropy)
12
Huber损失函数
  • 核心要点:Huber损失函数是一种结合了均方误差和绝对误差的损失函数,它在误差较小时使用均方误差,误差较大时使用绝对误差。
  • 具体解释:当预测值和真实值的误差较小时,Huber损失函数和均方误差损失函数类似,能够更精确地优化模型;当误差较大时,它和绝对误差损失函数类似,对异常值不那么敏感。
  • 应用场景:适用于存在异常值的回归问题。比如在一些数据集中,可能会存在一些离群点,如果使用均方误差损失函数,这些离群点会对模型的训练产生较大的影响,而Huber损失函数可以在一定程度上缓解这个问题。
  • 代码示例
1import numpy as np
2
3def huber_loss(y_true, y_pred, delta=1.0):
4    error = y_true - y_pred
5    abs_error = np.abs(error)
6    quadratic = np.minimum(abs_error, delta)
7    linear = abs_error - quadratic
8    return np.mean(0.5 * quadratic ** 2 + delta * linear)
9
10# 真实值
11y_true = np.array([1, 2, 3, 4, 5])
12# 预测值
13y_pred = np.array([1.2, 1.8, 3.2, 3.8, 5.1])
14
15# 计算Huber损失
16huber = huber_loss(y_true, y_pred)
17print("Huber损失:", huber)
18

代码演示总结

通过以上代码演示,我们可以看到不同的损失函数在计算和应用上的差异。均方误差损失函数适用于回归问题,能够很好地衡量预测值和真实值的接近程度;交叉熵损失函数则是分类问题的首选,它可以帮助我们评估模型输出的概率分布与真实标签的差异;Huber损失函数在处理存在异常值的回归问题时表现出色。

掌握了损失函数的常见类型和应用场景后,我们可以根据不同的场景选择合适的损失函数,从而提高模型的性能。下一节我们将深入学习神经网络的优化算法,进一步完善对本章神经网络基础主题的认知。


神经网络中的损失函数:常见类型与应用场景(代码演示)》 是转载文章,点击查看原文


相关推荐


《Local_Pdf_Chat_RAG 深度学习笔记:PDF 本地化对话的 RAG 原理与实践》
Bug Spray2025/10/2

在处理本地 PDF 文档的智能对话需求时,很多人会面临 “云端依赖泄露隐私”“开源项目部署门槛高” 的问题 —— 而 GitHub 上的 Local_Pdf_Chat_RAG 项目,恰好以 “本地化部署 + RAG 技术” 为核心,解决了 PDF 文档的高效检索与自然语言对话难题。近期我系统学习了这个项目,从环境搭建、代码核心模块拆解,到实际场景测试与调优,踩过不少新手常见的坑,也总结了一套可复用的实践经验。因此整理这份学习笔记,一方面记录自己的技术成长,另一方面希望能帮到同样想入门 “本地 P


【mdBook】7.2 替代后端
liuyuan7710/2/2025

如果我们不需要指定字数统计后端的完整名称/路径,是因为 mdbook 会尝试按照约定推断程序的名称。foo后端的可执行文件通常称为mdbook-foo,并在book.toml中有相关的条目。要明确告诉 mdbook 调用什么命令,可以使用command虽然这个示例是人为设计的,但希望它能足够展示如何为 mdbook 创建替代后端。本章开头提到的现有后端应该作为实际如何完成的良好示例,因此请随时浏览源代码或提出问题。


JavaScript中国手机号校验
蜚鸣9/30/2025

中国手机号校验方法摘要:中国手机号为11位数字,常见号段包括移动(134-139等)、联通(130-132等)、电信(133等)和虚拟运营商(170/171)。校验方法包括:1)基础正则校验(/^1[3-9]\d{9}$/);2)精确号段校验;3)号段数组比对法。建议采用前端简单校验+后端严格验证+短信验证的完整流程。国际号码可使用/^+?[1-9]\d{1,14}$/进行通用校验。(150字)


ZooKeeper详解
三坛海会大神5559/30/2025

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。它的设计目的是简化分布式系统的管理,保证多个节点之间的数据一致性和协调工作。对于已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和 Leader机器建立连接,并进行状态同步即可。


vue2动态实现多Y轴echarts图表,及节点点击事件
四月_h2025/10/3

父组件 <template> <div class="app-container"> <div class="content"> <el-form :model="echartsqueryParams" ref="echartsqueryForm" :inline="true" > <el-form-item label="号" prop="furnaceNumber"> <e


豆包怎么部署到本地?一文读懂AI工具的本地化安装全流程
Nightowls__2025/10/4

在数据自主性与即时响应需求的双重推动下,AI 模型的本地部署成为众多企业和个人用户的追求,豆包作为热门 AI 模型,其本地部署也备受关注。豆包本地部署在哪里?又该如何实现高效且安全的本地化运行呢? 一、为什么要本地部署豆包? 在数据自主性与即时响应需求的双重推动下,AI模型的本地部署逐渐成为企业及个人用户优化服务、保障隐私的关键策略。对于豆包这一主流AI模型而言,本地部署具有显著的优势: 满足多元场景需求:不同行业和领域对AI模型的应用需求千差万别,本地部署豆包能够确保模型在复杂网


QPS和TPS的区别,在实际项目中,如何准确测量和监控QPS和TPS?
IT橘子皮2025/10/5

QPS(Queries Per Second,每秒查询率)和TPS(Transactions Per Second,每秒事务数)是衡量系统性能的两个关键指标,虽然常被混淆,但存在以下核心区别: 1. ​定义与范围​ ​QPS​:表示服务器每秒能响应的查询次数,通常用于衡量特定查询服务器(如DNS、数据库)的处理能力。例如,一次页面加载可能触发多次查询(如HTML、CSS、JS请求),每个查询均计入QPS。 ​TPS​:表示每秒完成的事务数量。一个事务涵盖客户端请求、服务器内部处理及响应的完整流


Python 的 UDP 编程
hubenchang05152025/10/6

#Python 的 UDP 编程 用户数据报协议(User Datagram Protocol) 是一个 无连接、非可靠 的传输层协议,和 TCP 并列,是互联网中最常见的协议之一。 UDP 程序不存在连接,只需要绑定自身地址并收发数据即可。下面是一个示例,它创建了两个 socket,从一个向另一个发送数据。 import socket # 创建 UDP socket sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock2


一个基于 ASP.NET Core 的开源、模块化、多租户应用框架和内容管理系统
追逐时光者2025/10/8

前言 今天大姚给大家分享一个基于 ASP.NET Core 的开源、模块化、多租户应用框架和内容管理系统:OrchardCore。 项目介绍 OrchardCore 是一个开源的(BSD-3-Clause license)、模块化的、支持多租户的应用程序框架,使用 ASP.NET Core 构建。同时,它也是一个基于该框架的内容管理系统(CMS)。 DotNetGuide编程学院 DotNetGuide编程学院是一个专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享的知识


JDK8 新特性 - Stream 流详解
chirrupy_hamal2025/10/9

文章目录 一、认识 Stream二、Stream 的常用方法1、如何获取 Stream 流2、Stream 流常见的中间方法2.3、Stream 流常见的终结方法 一、认识 Stream 二、Stream 的常用方法 1、如何获取 Stream 流 2、Stream 流常见的中间方法 代码简化 s -> s.getName() Studet::getName 代码简化 2.3、Stream 流常见的终结方法 报错

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0