逻辑回归:损失和正则化技术的深入研究

news2025/4/23 6:36:15

逻辑回归:损失和正则化技术的深入研究

引言

逻辑回归是一种广泛应用于分类问题的统计模型,尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归",但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添加一个Sigmoid函数,将线性回归的输出映射到[0,1]区间,从而将连续值问题转换为概率分类问题[1]。
逻辑回归模型的训练过程与线性回归有两个关键区别:损失函数的选择和正则化的应用。本研究报告将深入探讨这两个方面,帮助读者理解逻辑回归模型的工作原理及其优化方法。

损失函数

逻辑回归与线性回归的损失函数差异

在线性回归中,我们通常使用平方损失函数(也称为L2损失函数)作为损失函数。平方损失函数计算预测值与实际值之间的平方差:
Loss = 1 2 ( y predicted − y actual ) 2 \text{Loss} = \frac{1}{2}(y_{\text{predicted}} - y_{\text{actual}})^2 Loss=21(ypredictedyactual)2
其中, y predicted y_{\text{predicted}} ypredicted是模型的预测值, y actual y_{\text{actual}} yactual是实际值。
然而,在逻辑回归中,我们使用对数损失函数(也称为交叉熵损失)作为损失函数。对数损失函数的计算公式为:
Loss = − 1 m ∑ i = 1 m [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [y_i \log(\hat{y}_i) + (1 - y_i)\log(1 - \hat{y}_i)] Loss=m1i=1m[yilog(y^i)+(1yi)log(1y^i)]
其中:

  • m m m是样本数量
  • y i y_i yi是第 i i i个样本的真实标签(0或1)
  • y ^ i \hat{y}_i y^i是模型对第 i i i个样本的预测概率
    对数损失函数在逻辑回归中的应用有以下几个原因:
  1. 处理概率输出:由于逻辑回归的输出是概率(范围在0到1之间),对数损失函数可以有效地衡量预测概率与真实标签之间的差异。
  2. 解决梯度下降问题:在线性回归中,使用平方损失函数在梯度下降过程中可能会遇到梯度消失或梯度爆炸的问题。而对数损失函数可以提供更稳定的梯度。
  3. 处理类别不平衡:在类别不平衡的数据集中,对数损失函数可以给予少数类更多的权重,从而提高模型的性能。

对数损失函数的数学推导

对数损失函数的推导基于最大似然估计。假设我们有一个二分类问题,其中每个样本 i i i都有一个特征向量 x i x_i xi和一个标签 y i y_i yi(0或1)。逻辑回归模型的预测概率可以表示为:
y ^ i = P ( y i = 1 ∣ x i ) = σ ( w T x i + b ) \hat{y}_i = P(y_i=1|x_i) = \sigma(w^T x_i + b) y^i=P(yi=1∣xi)=σ(wTxi+b)
其中, σ \sigma σ是Sigmoid函数, w w w是权重向量, b b b是偏置项。
根据二项分布的似然函数,我们可以写出所有样本的似然函数:
L ( w , b ) = ∏ i = 1 m P ( y i ∣ x i ; w , b ) = ∏ i = 1 m y ^ i y i ( 1 − y ^ i ) 1 − y i L(w, b) = \prod_{i=1}^{m} P(y_i|x_i; w, b) = \prod_{i=1}^{m} \hat{y}_i^{y_i} (1 - \hat{y}_i)^{1 - y_i} L(w,b)=i=1mP(yixi;w,b)=i=1my^iyi(1y^i)1yi
为了最大化似然函数,我们通常会取对数,得到对数似然函数:
log ⁡ L ( w , b ) = ∑ i = 1 m [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \log L(w, b) = \sum_{i=1}^{m} [y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i)] logL(w,b)=i=1m[yilogy^i+(1yi)log(1y^i)]
最大化对数似然函数等价于最小化负的对数似然函数,即对数损失函数:
Loss = − 1 m ∑ i = 1 m [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i)] Loss=m1i=1m[yilogy^i+(1yi)log(1y^i)]

对数损失函数的梯度计算

为了使用梯度下降算法优化逻辑回归模型,我们需要计算对数损失函数对权重 w w w和偏置 b b b的梯度。
假设模型的输出为:
y ^ = σ ( w T x + b ) \hat{y} = \sigma(w^T x + b) y^=σ(wTx+b)
其中, σ ( a ) = 1 1 + e − a \sigma(a) = \frac{1}{1 + e^{-a}} σ(a)=1+ea1
那么,对数损失函数对权重 w w w的梯度为:
∂ Loss ∂ w = 1 m ∑ i = 1 m ( y ^ i − y i ) x i \frac{\partial \text{Loss}}{\partial w} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) x_i wLoss=m1i=1m(y^iyi)xi
对偏置 b b b的梯度为:
∂ Loss ∂ b = 1 m ∑ i = 1 m ( y ^ i − y i ) \frac{\partial \text{Loss}}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) bLoss=m1i=1m(y^iyi)
这些梯度可以直接用于梯度下降算法来更新权重和偏置。

正则化

正则化的必要性

在逻辑回归中,正则化是防止过拟合的重要手段。过拟合是指模型在训练数据上表现很好,但在测试数据上表现不佳的现象。正则化通过降低模型的复杂度来提高其泛化能力。
逻辑回归模型的损失函数通常会添加一个正则化项:
Loss = 对数损失 + λ ⋅ 正则化项 \text{Loss} = \text{对数损失} + \lambda \cdot \text{正则化项} Loss=对数损失+λ正则化项
其中, λ \lambda λ是正则化系数,控制正则化项的强度。

L2正则化

L2正则化(也称为Ridge正则化)是最常用的正则化方法之一。在L2正则化中,正则化项是权重向量的L2范数的平方:
正则化项 = 1 2 ∥ w ∥ 2 2 = 1 2 ∑ j = 1 n w j 2 \text{正则化项} = \frac{1}{2} \|w\|^2_2 = \frac{1}{2} \sum_{j=1}^{n} w_j^2 正则化项=21w22=21j=1nwj2
其中, n n n是特征的数量, w j w_j wj是第 j j j个特征的权重。
L2正则化的损失函数可以表示为:
Loss = − 1 m ∑ i = 1 m [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] + λ ⋅ 1 2 ∑ j = 1 n w j 2 \text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i)] + \lambda \cdot \frac{1}{2} \sum_{j=1}^{n} w_j^2 Loss=m1i=1m[yilogy^i+(1yi)log(1y^i)]+λ21j=1nwj2
L2正则化的梯度计算如下:
对权重 w w w的梯度:
∂ Loss ∂ w = 1 m ∑ i = 1 m ( y ^ i − y i ) x i + λ w \frac{\partial \text{Loss}}{\partial w} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) x_i + \lambda w wLoss=m1i=1m(y^iyi)xi+λw
对偏置 b b b的梯度:
∂ Loss ∂ b = 1 m ∑ i = 1 m ( y ^ i − y i ) \frac{\partial \text{Loss}}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) bLoss=m1i=1m(y^iyi)
L2正则化的效果是通过增加权重的平方和来惩罚模型的复杂度,从而使得权重向量的长度被限制在一个较小的范围内。这有助于防止模型对训练数据过于敏感,从而提高其泛化能力。

L1正则化

L1正则化(也称为Lasso正则化)是另一种常用的正则化方法。在L1正则化中,正则化项是权重向量的L1范数:
正则化项 = ∥ w ∥ 1 = ∑ j = 1 n ∣ w j ∣ \text{正则化项} = \|w\|_1 = \sum_{j=1}^{n} |w_j| 正则化项=w1=j=1nwj
L1正则化的损失函数可以表示为:
Loss = − 1 m ∑ i = 1 m [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] + λ ⋅ ∑ j = 1 n ∣ w j ∣ \text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i)] + \lambda \cdot \sum_{j=1}^{n} |w_j| Loss=m1i=1m[yilogy^i+(1yi)log(1y^i)]+λj=1nwj
L1正则化的梯度计算如下:
对权重 w w w的梯度:
∂ Loss ∂ w = 1 m ∑ i = 1 m ( y ^ i − y i ) x i + λ ⋅ sign ( w ) \frac{\partial \text{Loss}}{\partial w} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) x_i + \lambda \cdot \text{sign}(w) wLoss=m1i=1m(y^iyi)xi+λsign(w)
其中, sign ( w ) \text{sign}(w) sign(w)是权重向量的符号函数,即:
sign ( w j ) = { 1 , w j > 0 − 1 , w j < 0 0 , w j = 0 \text{sign}(w_j) = \begin{cases} 1, & w_j > 0 \\ -1, & w_j < 0 \\ 0, & w_j = 0 \end{cases} sign(wj)= 1,1,0,wj>0wj<0wj=0
对偏置 b b b的梯度:
∂ Loss ∂ b = 1 m ∑ i = 1 m ( y ^ i − y i ) \frac{\partial \text{Loss}}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (\hat{y}_i - y_i) bLoss=m1i=1m(y^iyi)
L1正则化的一个重要特点是它可以产生稀疏权重向量,即一些权重会变成零。这有助于特征选择,因为权重为零的特征可以被排除在模型之外。

弹性网络正则化

弹性网络正则化是L1和L2正则化的结合。它的正则化项可以表示为:
正则化项 = α ∥ w ∥ 1 + ( 1 − α ) ⋅ 1 2 ∥ w ∥ 2 2 \text{正则化项} = \alpha \|w\|_1 + (1 - \alpha) \cdot \frac{1}{2} \|w\|^2_2 正则化项=αw1+(1α)21w22
其中, α \alpha α是介于0和1之间的参数,控制L1和L2正则化的相对强度。
弹性网络正则化的损失函数可以表示为:
Loss = − 1 m ∑ i = 1 m [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] + λ ⋅ [ α ∥ w ∥ 1 + ( 1 − α ) ⋅ 1 2 ∥ w ∥ 2 2 ] \text{Loss} = -\frac{1}{m} \sum_{i=1}^{m} [y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i)] + \lambda \cdot [\alpha \|w\|_1 + (1 - \alpha) \cdot \frac{1}{2} \|w\|^2_2] Loss=m1i=1m[yilogy^i+(1yi)log(1y^i)]+λ[αw1+(1α)21w22]
弹性网络正则化结合了L1和L2正则化的优点。它不仅可以产生稀疏权重向量,还可以处理特征之间的相关性问题。

早停法

早停法是另一种防止过拟合的方法。它通过监控模型在验证集上的性能来决定何时停止训练。具体来说,当模型在验证集上的性能连续若干个epoch没有改善时,训练过程就会被停止。
早停法的实现通常包括以下步骤:

  1. 将训练数据集划分为训练集和验证集。
  2. 在每个epoch结束时,计算模型在验证集上的损失或准确率。
  3. 如果模型在验证集上的性能连续若干个epoch没有改善,就停止训练过程。
    早停法的一个重要参数是"耐心"(patience),它表示在停止训练之前等待的epoch数量。耐心的值可以根据具体问题进行调整。
    早停法的优点是它可以防止模型过度拟合训练数据,同时充分利用训练数据中的信息。此外,早停法还可以作为正则化的一种形式,因为它限制了模型的训练步骤。

实际应用中的考虑因素

特征缩放

在逻辑回归中,特征缩放(也称为特征归一化)是一个重要的考虑因素。由于逻辑回归使用梯度下降算法来优化权重,特征的尺度可能会影响算法的收敛速度。
常见的特征缩放方法包括:

  1. 标准化:将每个特征减去其均值并除以其标准差,使得特征的均值为0,标准差为1。
  2. 归一化:将每个特征缩放到[0,1]范围内,通过减去最小值并除以最大值与最小值的差。
    在逻辑回归中,特征缩放可以加速梯度下降算法的收敛,同时也可以提高模型的性能。

处理类别不平衡

在实际应用中,数据集可能存在类别不平衡的问题,即一个类别的样本数量远多于另一个类别。这会导致逻辑回归模型偏向于多数类,从而降低模型的性能。
处理类别不平衡的方法包括:

  1. 重新采样:通过过采样少数类或欠采样多数类来平衡类别分布。
  2. 调整类别权重:在损失函数中为少数类赋予更高的权重。
  3. 使用不同的评估指标:例如精确率、召回率、F1分数等,而不是仅仅依赖准确率。
    在逻辑回归中,可以使用class_weight参数来调整类别权重。例如,在scikit-learn的逻辑回归实现中,可以设置class_weight='balanced'来自动调整类别权重。

处理多分类问题

逻辑回归本质上是用于二分类问题的,但可以通过多种方法将其扩展到多分类问题。
常见的多分类方法包括:

  1. 一对多(One-vs-All):将多分类问题分解为多个二分类问题,每个二分类问题对应一个类别与其他类别的比较。
  2. 一对一(One-vs-One):将多分类问题分解为多个二分类问题,每个二分类问题对应两个类别之间的比较。
  3. ** softmax回归**:在逻辑回归的基础上,使用softmax函数将输出转换为概率分布。
    在scikit-learn中,逻辑回归默认使用一对多方法来处理多分类问题。

超参数调优

逻辑回归模型有几个重要的超参数需要调优,包括:

  1. 正则化系数(C):在scikit-learn中,C是正则化强度的倒数。较小的C表示更强的正则化。
  2. 求解器(solver):不同的求解器适用于不同的场景。例如,'lbfgs’适用于小数据集,'sag’和’saga’适用于大数据集。
  3. 最大迭代次数(max_iter):控制算法的最大迭代次数。
  4. 学习率(learning_rate):在’sgd’求解器中使用,控制每一步的更新幅度。
    超参数调优可以通过网格搜索(Grid Search)或随机搜索(Random Search)来实现。在scikit-learn中,可以使用GridSearchCVRandomizedSearchCV来完成这一任务。

Python实例

以下是一个完整的Python实例,展示了如何使用scikit-learn库实现逻辑回归模型,并应用对数损失函数和正则化技术。

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# 加载Iris数据集
data = load_iris()
X = data.data
y = data.target
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression(solver='saga', max_iter=1000, random_state=42)
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
# 打印混淆矩阵
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))
# 打印分类报告
print("Classification Report:")
print(classification_report(y_test, y_pred))
# 应用L2正则化
model_l2 = LogisticRegression(solver='lbfgs', max_iter=1000, random_state=42, C=0.1)
model_l2.fit(X_train, y_train)
y_pred_l2 = model_l2.predict(X_test)
accuracy_l2 = accuracy_score(y_test, y_pred_l2)
print(f"Accuracy with L2 Regularization: {accuracy_l2:.2f}")
# 使用GridSearchCV进行超参数调优
param_grid = {'C': [0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga']}
grid_search = GridSearchCV(LogisticRegression(max_iter=1000, random_state=42), param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 获取最佳模型
best_model = grid_search.best_estimator_
# 预测测试集
y_pred_best = best_model.predict(X_test)
# 计算准确率
accuracy_best = accuracy_score(y_test, y_pred_best)
print(f"Accuracy with Best Parameters: {accuracy_best:.2f}")
# 打印最佳参数
print("Best Parameters:")
print(grid_search.best_params_)

结论

逻辑回归是一种强大的分类算法,其损失函数和正则化技术是模型性能的关键因素。通过对数损失函数,逻辑回归可以有效地处理概率输出,并提供稳定的梯度。通过正则化技术,逻辑回归可以防止过拟合,提高模型的泛化能力。
在实际应用中,我们需要根据具体问题选择合适的正则化方法、调整超参数,并处理数据集中的不平衡问题。通过合理的模型设计和参数调整,逻辑回归可以成为解决分类问题的有效工具。

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

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

相关文章

【锂电池SOH估计】RF随机森林锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)

目录 效果一览程序获取程序内容代码分享研究内容基于随机森林(RF)的锂电池健康状态(SOH)估计算法研究摘要1. 引言2. 锂电池SOH评估框架3. 实验与结果分析4. 未来研究方向6. 结论效果一览 程序获取 获取方式一:文章顶部资源处直接下载:【锂电池SOH估计】RF随机森林锂电池…

【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现

介绍 广义上讲&#xff0c;扩散模型是一种生成式深度学习模型&#xff0c;它通过学习到的去噪过程来创建数据。扩散模型有很多变体&#xff0c;其中最流行的通常是文本条件模型&#xff0c;它可以根据提示生成特定的图像。一些扩散模型&#xff08;例如 Control-Net&#xff0…

121.在 Vue3 中使用 OpenLayers 实现去掉鼠标右键默认菜单并显示 Feature 信息

🎯 实现效果 👇 本文最终实现的效果如下: ✅ 地图初始化时绘制一个多边形; ✅ 鼠标 右键点击地图任意位置; ✅ 若命中 Feature,则弹出该图形的详细信息; ✅ 移除浏览器默认的右键菜单,保留地图交互的完整控制。 💡 整个功能基于 Vue3 + OpenLayers 完成,采用 Com…

进阶篇 第 6 篇:时间序列遇见机器学习与深度学习

进阶篇 第 6 篇&#xff1a;时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中&#xff0c;我们探讨了如何通过精心的特征工程&#xff0c;将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…

【音视频】音频解码实战

音频解码过程 ⾳频解码过程如下图所示&#xff1a; FFmpeg流程 关键函数 关键函数说明&#xff1a; avcodec_find_decoder&#xff1a;根据指定的AVCodecID查找注册的解码器。av_parser_init&#xff1a;初始化AVCodecParserContext。avcodec_alloc_context3&#xff1a;为…

DOCA介绍

本文分为两个部分&#xff1a; DOCA及BlueField介绍如何运行DOCA应用&#xff0c;这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍&#xff1a; 现代企业数据中心是软件定义的、完全可编程的基础设施&#xff0c;旨在服务于跨云、核心和边缘环境的高度分布式应用工作…

# 利用迁移学习优化食物分类模型:基于ResNet18的实践

利用迁移学习优化食物分类模型&#xff1a;基于ResNet18的实践 在深度学习的众多应用中&#xff0c;图像分类一直是一个热门且具有挑战性的领域。随着研究的深入&#xff0c;我们发现利用预训练模型进行迁移学习是一种非常有效的策略&#xff0c;可以显著提高模型的性能&#…

洗车小程序系统前端uniapp 后台thinkphp

洗车小程序系统 前端uniapp 后台thinkphp 支持多门店 分销 在线预约 套餐卡等

HCIP(综合实验2)

1.实验拓补图 2.实验要求 1.根据提供材料划分VLAN以及IP地址&#xff0c;PC1/PC2属于生产一部员工划分VLAN10,PC3属于生产二部划分VLAN20 2.HJ-1HJ-2交换机需要配置链路聚合以保证业务数据访问的高带宽需求 3.VLAN的放通遵循最小VLAN透传原则 4.配置MSTP生成树解决二层环路问题…

Linux mmp文件映射补充(自用)

addr一般为NULL由OS指明&#xff0c;length所需长度&#xff08;4kb对齐&#xff09;&#xff0c;prot&#xff08;权限&#xff0c;一般O_RDWR以读写&#xff09;&#xff0c; flag&#xff08;MAP_SHARED(不刷新到磁盘上&#xff0c;此进程独有)和MAP_PRIVATE&#xff08;刷新…

单元测试学习笔记(一)

自动化测试 通过测试工具/编程模拟手动测试步骤&#xff0c;全自动半自动执行测试用例&#xff0c;对比预期输出和实际输出&#xff0c;记录并统计测试结果&#xff0c;减少重复的工作量。 单元测试 针对最小的单元测试&#xff0c;Java中就是一个一个的方法就是一个一个的单…

【深度学习新浪潮】新视角生成的研究进展调研报告(2025年4月)

新视角生成(Novel View Synthesis)是计算机视觉与图形学领域的核心技术,旨在从单张或稀疏图像中生成任意视角的高保真图像,突破传统多视角数据的限制,实现对三维场景的自由探索。作为计算机视觉与图形学的交叉领域,近新视角生成年来在算法创新、应用落地和工具生态上均取…

OpenHarmony OS 5.0与Android 13显示框架对比

1. 架构概述 1.1 OpenHarmony OS 5.0架构 OpenHarmony OS 5.0采用分层架构设计&#xff0c;图形显示系统从底层到顶层包括&#xff1a; 应用层&#xff1a;ArkUI应用和第三方应用框架层&#xff1a;ArkUI框架、窗口管理API系统服务层&#xff1a;图形合成服务、窗口管理服务…

[Java] 泛型

目录 1、初识泛型 1.1、泛型类的使用 1.2、泛型如何编译的 2、泛型的上界 3、通配符 4、通配符上界 5、通配符下界 1、初识泛型 泛型&#xff1a;就是将类型进行了传递。从代码上讲&#xff0c;就是对类型实现了参数化。 泛型的主要目的&#xff1a;就是指定当前的容器…

Spark–steaming

实验项目: 找出所有有效数据&#xff0c;要求电话号码为11位&#xff0c;但只要列中没有空值就算有效数据。 按地址分类&#xff0c;输出条数最多的前20个地址及其数据。 代码讲解&#xff1a; 导包和声明对象&#xff0c;设置Spark配置对象和SparkContext对象。 使用Spark S…

深度学习训练中的显存溢出问题分析与优化:以UNet图像去噪为例

最近在训练一个基于 Tiny-UNet 的图像去噪模型时&#xff0c;我遇到了经典但棘手的错误&#xff1a; RuntimeError: CUDA out of memory。本文记录了我如何从复现、分析&#xff0c;到逐步优化并成功解决该问题的全过程&#xff0c;希望对深度学习开发者有所借鉴。 训练数据&am…

如何修复WordPress中“您所关注的链接已过期”的错误

几乎每个管理WordPress网站的人都可能遇到过“您关注的链接已过期”的错误&#xff0c;尤其是在上传插件或者主题的时候。本文将详细解释该错误出现的原因以及如何修复&#xff0c;帮助您更好地管理WordPress网站。 为什么会出现“您关注的链接已过期”的错误 为了防止资源被滥…

从零开始搭建Django博客①--正式开始前的准备工作

本文主要在Ubuntu环境上搭建&#xff0c;为便于研究理解&#xff0c;采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建的可视化桌面&#xff0c;涉及一些文件操作部分便于通过桌面化进行理解&#xff0c;最后的目标是在本地搭建好系统后&#xff0c;迁移至云服务器并通过…

健身房管理系统(springboot+ssm+vue+mysql)含运行文档

健身房管理系统(springbootssmvuemysql)含运行文档 健身房管理系统是一个全面的解决方案&#xff0c;旨在帮助健身房高效管理其运营。系统提供多种功能模块&#xff0c;包括会员管理、员工管理、会员卡管理、教练信息管理、解聘管理、健身项目管理、指导项目管理、健身器材管理…

Java从入门到“放弃”(精通)之旅——继承与多态⑧

Java从入门到“放弃”&#xff08;精通&#xff09;之旅&#x1f680;——继承与多态⑧ 一、继承&#xff1a;代码复用的利器 1.1 为什么需要继承&#xff1f; 想象一下我们要描述狗和猫这两种动物。如果不使用继承&#xff0c;代码可能会是这样&#xff1a; // Dog.java pu…