教程深度学习机器学习【免费下载链接】eat_tensorflow2_in_30_daysTensorflow2.0 is delicious, just eat it! 项目地址https://gitcode.com/gh_mirrors/ea/eat_tensorflow2_in_30_days点击查看免费下载在eat_tensorflow2_in_30_days项目第五章中阶 API中5-5,损失函数losses.md 系统讲解了深度学习目标函数的构成、Keras 内置损失函数的选择原则以及两种自定义损失函数的实现范式。本文以该文档为骨架结合仓库中 1-1,结构化数据建模流程范例.md、1-3,文本数据建模流程范例.md、1-4,时间序列数据建模流程范例.md、6-2,训练模型的3种方法.md 等章节中的真实调用代码深入讲解回归、二分类、多分类场景下的损失函数选型并给出可直接复制运行的 Focal Loss 自定义实现。读完本文你将掌握如何在model.compile与自定义训练循环中正确指定损失函数、如何理解正则化项与约束项在目标函数中的作用以及如何用函数式和类式两种写法实现自己的损失函数。一、目标函数的构成损失函数 正则化项监督学习的目标函数一般由损失函数Loss和正则化项Regularization两部分组成Objective Loss Regularization其中损失函数衡量模型预测与真实标签之间的差距是梯度下降优化的直接对象而正则化项则是对模型复杂度施加的惩罚用于抑制过拟合。两者共同决定了模型参数的最优方向。1.1 正则化项在层中指定对于 Keras 模型目标函数中的正则化项一般在各层内部指定而不是在编译阶段传入。以layers.Dense为例常用的正则化相关参数有kernel_regularizer对权重矩阵 W 施加正则化如regularizers.l1(0.01)、regularizers.l2(0.01)、regularizers.l1_l2(l1, l2)bias_regularizer对偏置向量 b 施加正则化activity_regularizer对层输出激活后的值施加正则化kernel_constraint/bias_constraint约束权重或偏置的取值范围例如constraints.MaxNorm(max_value2, axis0)将每个权向量的范数限制在 2 以内。这同样是一种正则化手段通过在优化迭代中把参数投影回约束域来实现。以下是原文档给出的完整示例构造了一个带多种正则化与约束的两层网络并以binary_crossentropy作为损失函数、AUC作为评估指标完成编译import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras import layers, models, losses, regularizers, constraints tf.keras.backend.clear_session() model models.Sequential() model.add(layers.Dense(64, input_dim64, kernel_regularizerregularizers.l2(0.01), activity_regularizerregularizers.l1(0.01), kernel_constraintconstraints.MaxNorm(max_value2, axis0))) model.add(layers.Dense(10, kernel_regularizerregularizers.l1_l2(0.01, 0.01), activationsigmoid)) model.compile(optimizerrmsprop, lossbinary_crossentropy, metrics[AUC]) model.summary()输出模型结构示意两个全连接层合计 4810 个可训练参数Model: sequential _________________________________________________________________ Layer (type) Output Shape Param # dense (Dense) (None, 64) 4160 _________________________________________________________________ dense_1 (Dense) (None, 10) 650 Total params: 4,810 Trainable params: 4,810 Non-trainable params: 0 _________________________________________________________________要点正则化项绑定在层上、随层一起序列化保存而损失函数则在model.compile(loss...)时统一指定。二者职责分离这是 Keras 目标函数设计的基本约定。1.2 损失函数在编译时指定损失函数在模型编译compile时指定针对不同任务有明确的选择惯例任务类型推荐损失函数说明回归mean_squared_errormse均方误差衡量预测值与真实值平方差的均值二分类binary_crossentropy二元交叉熵多分类label 为 one-hot 编码categorical_crossentropy类别交叉熵多分类label 为类别序号编码sparse_categorical_crossentropy稀疏类别交叉熵多分类任务中标签编码方式直接决定损失函数的选择one-hot 编码如[0,1,0,0]配categorical_crossentropy整数序号编码如2配sparse_categorical_crossentropy两者计算等价只是输入形式不同。二、内置损失函数类的实现与函数的实现Keras 内置损失函数一般有类实现和函数实现两种形式。例如CategoricalCrossentropy和categorical_crossentropy都是类别交叉熵前者是类tf.keras.losses.CategoricalCrossentropy后者是函数tf.keras.losses.categorical_crossentropy。类实现可以携带状态与配置、支持序列化通常在自定义训练循环中作为对象调用函数实现更轻量适合直接传入compile或低阶 API。原文档列出的常用内置损失函数整理如下损失函数用途简写类实现 / 函数实现mean_squared_error回归均方误差mse/MSEMeanSquaredErrormean_absolute_error回归平均绝对误差mae/MAEMeanAbsoluteErrormean_absolute_percentage_error回归平均百分比误差mape/MAPEMeanAbsolutePercentageErrorHuber回归介于 mse 与 mae 之间对异常值鲁棒—仅类实现Huberbinary_crossentropy二分类二元交叉熵—BinaryCrossentropycategorical_crossentropy多分类label one-hot—CategoricalCrossentropysparse_categorical_crossentropy多分类label 序号编码—SparseCategoricalCrossentropyhinge二分类SVM 经典损失合页损失—Hingekld相对熵KL 散度度量两个概率分布差异常用于 EM 类算法—KLDivergence/KLDcosine_similarity余弦相似度可用于多分类—CosineSimilarity2.1 仓库中的实际用法印证这些内置损失在项目各实战章节中均有直接调用可相互印证回归3-3,高阶API示范.md 中model.compile(optimizeradam, lossmse, metrics[mae])以字符串形式传入 mse6-6,使用tensorflow-serving部署模型.md 中线性回归模型同样使用lossmse。二分类1-1,结构化数据建模流程范例.md 中泰坦尼克生存预测使用lossbinary_crossentropy, metrics[AUC]与本文示例配置一致。多分类6-4,使用多GPU训练模型.md 与 6-5,使用TPU训练模型.md 中均使用类实现losses.SparseCategoricalCrossentropy(from_logitsTrue)并显式声明from_logitsTrue——当网络最后一层是线性输出未经过 softmax时必须开启该参数让交叉熵在内部完成 softmax 计算数值上更稳定。2.2 在自定义训练循环中使用类实现内置损失函数的类实现可以直接作为对象在tf.GradientTape中调用。1-3,文本数据建模流程范例.md 展示了 IMDb 文本分类中losses.BinaryCrossentropy()的完整用法optimizer optimizers.Nadam() loss_func losses.BinaryCrossentropy() train_loss metrics.Mean(nametrain_loss) train_metric metrics.BinaryAccuracy(nametrain_accuracy) tf.function def train_step(model, features, labels): with tf.GradientTape() as tape: predictions model(features, trainingTrue) loss loss_func(labels, predictions) gradients tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss.update_state(loss) train_metric.update_state(labels, predictions)这里loss_func作为可调用对象接收(labels, predictions)返回标量损失与metrics.Mean配合在批次间累加平均构成一个完整的中阶 API 自定义训练循环。三、自定义损失函数函数式与类式两种范式当内置损失无法满足需求时Keras 支持两种自定义方式二者的共同接口约定是接收两个张量y_true和y_pred作为输入输出一个标量作为损失值。3.1 函数式定义直接编写一个接收(y_true, y_pred)、返回标量的函数即可函数闭包可以捕获超参数def focal_loss(gamma2., alpha0.75): def focal_loss_fixed(y_true, y_pred): bce tf.losses.binary_crossentropy(y_true, y_pred) p_t (y_true * y_pred) ((1 - y_true) * (1 - y_pred)) alpha_factor y_true * alpha (1 - y_true) * (1 - alpha) modulating_factor tf.pow(1.0 - p_t, gamma) loss tf.reduce_sum(alpha_factor * modulating_factor * bce, axis-1) return loss return focal_loss_fixed3.2 类式定义继承tf.keras.losses.Loss对tf.keras.losses.Loss进行子类化重写call方法实现损失计算逻辑即可得到带配置能力的类实现class FocalLoss(tf.keras.losses.Loss): def __init__(self, gamma2.0, alpha0.75, namefocal_loss): self.gamma gamma self.alpha alpha def call(self, y_true, y_pred): bce tf.losses.binary_crossentropy(y_true, y_pred) p_t (y_true * y_pred) ((1 - y_true) * (1 - y_pred)) alpha_factor y_true * self.alpha (1 - y_true) * (1 - self.alpha) modulating_factor tf.pow(1.0 - p_t, self.gamma) loss tf.reduce_sum(alpha_factor * modulating_factor * bce, axis-1) return loss两种写法计算逻辑完全一致类式实现额外具备name标识便于在compile、TensorBoard 与模型保存中区分。3.3 Focal Loss 的原理与参数含义Focal Loss 是对binary_crossentropy的一种改进在样本不均衡且存在大量易分类样本的场景下相比普通二元交叉熵具有明显优势。它引入两个可调参数alpha主要用于衰减负样本的权重默认0.75偏向正样本gamma主要用于衰减容易训练样本的权重默认2.0。通过二者配合模型将注意力聚焦在正样本和困难样本上——这正是 Focal聚焦名称的由来。其数学定义如下$$ focal_loss(y,p) \begin{cases} -\alpha (1-p)^{\gamma}\log(p) \text{if y 1}\ -(1-\alpha) p^{\gamma}\log(1-p) \text{if y 0} \end{cases} $$对照代码理解p_t表示样本被正确分类的概率y1时取py0时取1-pmodulating_factor (1-p_t)^gamma是调制因子样本越易分类p_t越接近 1其惩罚越小从而压低易样本的贡献alpha_factor则按标签类别加权实现正负样本的平衡。3.4 仓库中的自定义损失实例MSPE自定义损失在仓库中有多处真实应用。1-4,时间序列数据建模流程范例.md 为新冠新增病例预测定义了 MSPE平均平方百分比误差并实现了get_config以保证可序列化# 自定义损失函数考虑平方差和预测目标的比值 class MSPE(losses.Loss): def call(self, y_true, y_pred): err_percent (y_true - y_pred)**2 / (tf.maximum(y_true**2, 1e-7)) mean_err_percent tf.reduce_mean(err_percent) return mean_err_percent def get_config(self): config super(MSPE, self).get_config() return config随后以model.compile(optimizeroptimizer, lossMSPE(nameMSPE))的方式传入编译1-4,时间序列数据建模流程范例.md并在模型加载后第570行复用同一损失完成评估。注意其中tf.maximum(y_true**2, 1e-7)的写法是为了防止除零这是自定义损失函数中常见的数值稳定性处理技巧与 Focal Loss 中的实现细节异曲同工。四、损失函数在三种训练范式中的接入方式结合 6-2,训练模型的3种方法.md 的划分损失函数在 Keras 的三种训练范式中接入位置不同本质却一致内置训练model.fit损失在compile阶段传入字符串、函数、类实例三者皆可如 5-4,模型层layers.md 的model.compile(optimizersgd, lossmse, metrics[mae])自定义训练循环tf.GradientTape损失作为对象在每一步前向传播中手动计算如 1-3,文本数据建模流程范例.md 所示中阶 API 方式model.loss_func属性3-2,中阶API示范.md 将losses.mean_squared_error或losses.binary_crossentropy赋值给模型的loss_func属性在自定义的train_step中调用第112行、第294行实现半内置半自定义的训练流程。五、小结与延伸阅读本仓库的 eat_tf2_ebook.md 收录了全部章节的合订内容其中 MSPE、SparseCategoricalCrossentropy(from_logitsTrue)、lossmse等用法均与各章节一一对应english/Chapter5-5.md 提供了本章的英文版本适合对照阅读。核心结论回顾目标函数 损失函数 正则化项正则化*_regularizer、*_constraint在层中声明损失函数在compile时指定选型口诀回归用mse二分类用binary_crossentropy多分类依据标签编码选择categorical_crossentropyone-hot或sparse_categorical_crossentropy序号内置损失有类/函数双实现类实现支持状态、配置与序列化适合自定义训练循环自定义损失只需实现(y_true, y_pred) - scalar函数式适合快速原型继承tf.keras.losses.Loss重写call可选实现get_config适合正式项目Focal Loss 通过alpha平衡正负样本、gamma聚焦困难样本是样本不均衡场景下的首选改造方向。赞分享教程深度学习机器学习【免费下载链接】eat_tensorflow2_in_30_daysTensorflow2.0 is delicious, just eat it! 项目地址https://gitcode.com/gh_mirrors/ea/eat_tensorflow2_in_30_days点击查看免费下载相关推荐awesome-copilot 技能深度解析使用 Microsoft Fabric Data Factory 将数据接入 Lakehouse 的完整指南awesome copilot 技能深度解析使用 Microsoft Fabric Data Factory 将数据接入 Lakehouse 的完整指南 本文教程深度学习机器学习SuperGradients 损失函数Loss完全指南内置损失、自定义损失与配置化训练SuperGradients 损失函数Loss完全指南内置损失、自定义损失与配置化训练 导读 在 SuperGradients 中损失函数Loss是深度学习计算机视觉预训练人工智能D2L.ai损失函数大全交叉熵、Focal Loss与对比损失D2L.ai损失函数大全交叉熵、Focal Loss与对比损失 深度学习中的损失函数是模型训练的核心它衡量了模型预测与实际标签之间的差异。在D2L.ai这个文档教程人工智能深度学习NLP计算机视觉强化学习上一篇如何快速上手Factorie构建概率模型的完整指南下一篇终极指南如何生成专业的LZ4测试报告并集成JUnit与CI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
柔性压力传感器如何重塑BOM价值链? 全球科技产业的目光正经历一次深度的战略转移。当机器人真正跨越“走起来”的门槛、迈入高强度的真实工厂环境时,行业的真正护城河已经发生了变化:核心价值链正迅速从“腿和关节”(运动控制)向力觉、触觉、电子皮肤等“感知层”强… · 2026/9/24 17:08:28
免费逆向分析框架 Ghidra:从导入第一个 .exe 到看懂一条恶意代码的完整路径 免费逆向分析框架 Ghidra:从导入第一个 .exe 到看懂一条恶意代码的完整路径 【免费下载链接】ghidra Ghidra is a software reverse engineering (SRE) framework 项目地址: https://gitcode.com/GitHub_Trending/gh/ghidra
凌晨两点,你在案头放了… · 2026/9/24 17:08:28
Qwen-Image-2.1 部署指南:低显存CPU Offload技巧,消费级显卡也能快速跑 Qwen-Image-2.1 部署指南:低显存CPU Offload技巧,消费级显卡也能快速跑 【免费下载链接】Qwen-Image-2.1 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen-Image-2.1
Qwen-Image-2.1 是 Qwen(通义千问)团队开源的… · 2026/9/24 17:08:28
Python脉象识别系统从源码到实战:信号处理与特征分类全解析 简介:这是一套基于Python实现的中医脉象识别系统源码,面向医疗健康领域开发者、科研人员以及对智能诊断感兴趣的Python学习者。系统覆盖从脉象信号采集、去噪滤波、特征提取到模型训练与结果输出的完整流程,内置CNN、RNN等深度学习算法&#… · 2026/9/24 18:14:04
Java毕设考勤系统全流程实战:Spring Boot+小程序从表设计到部署避坑 简介:这是一套面向本科毕业设计的小程序上课考勤系统完整源代码,基于Spring Boot与微信小程序开发,适合Java学习者、毕设学生作为项目参考。系统实现了后台管理、小程序端GPS签到、定位打卡、迟到统计等核心考勤功能,设计获得优秀… · 2026/9/24 18:14:04
遗传算法与遗传编程预测股票价格:靠谱还是玄学? 简介:面向量化交易与机器学习初学者,这套算法交易实验代码以苹果股价预测为场景,分别采用遗传编程和遗传算法两种进化计算策略。遗传编程通过进化基于树的种群来最小化预测价格与实际价格之间的误差,并融合纳斯达克、苹果、标普等… · 2026/9/24 18:14:04
基于YOLOv8的大熊猫实时视觉检测与AR互动系统 简介:这是一套基于Python开发的大熊猫主题AI互动拍照系统源码,面向Web开发初学者与AI应用实践者,聚焦于计算机视觉与Web服务的融合落地。项目采用Flask或Django框架构建后端服务,集成姿态识别、风格迁移(CartoonGAN&am… · 2026/9/24 18:14:04
C#超市收银系统源码解析:事务扣库存与WinForm实战链路 简介:这是一套面向计算机专业本科生与毕业设计初学者的C#超市收银管理系统源码,聚焦零售场景下的收银流程优化与后台管理实践,助力开发者掌握企业级桌面应用开发全流程。资源共271个文件,包含106个核心业务逻辑.cs文件、27个运行依… · 2026/9/24 18:14:04
基于SpringBoot的宠物救助及领养平台的设计与实现-附源码 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/24 18:13:46
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44