深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍
在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中,我们的目标就是最小化这个损失函数,就像是在一场游戏中,我们的目标是获得尽可能低的失误和丢分。
损失函数的选择对于模型的训练至关重要。不同的问题可能需要不同的损失函数。比如在图像识别中,我们可能需要一个能够处理大量类别的损失函数,这时候交叉熵损失就是一个很好的选择。而在预测房价等连续值的问题中,均方误差损失可能更为合适。
损失函数不仅是评价模型性能的标尺,也是指导模型学习的方向。在训练过程中,我们通过计算损失函数的梯度,并使用梯度下降算法来更新模型的权重,以此来减少损失函数的值。
1. 损失函数的作用
1-1. 损失函数作用
想象一下,你在玩一个投飞镖的游戏,而飞镖靶就是损失函数。你的每一次投掷,都对应着模型的一次预测。飞镖落在靶上的位置,就是预测结果与实际结果之间的误差。损失函数的作用就是告诉我们,我们的飞镖投得有多准,或者说,我们的模型预测得有多准确。
在深度学习中,损失函数计算模型输出(预测值)和真实标签(实际值)之间的差异。这个差异,或者说“误差”,量化了模型的性能。训练深度学习模型的过程,本质上就是通过调整模型的参数来最小化损失函数的过程。损失函数通常被视为一种 优化目标,它在训练过程中不断变化,我们希望通过优化算法(如梯度下降)来不断 减小损失函数,使得模型更精确地拟合数据。
1-2. 为什么要让损失函数持续下降
损失函数的下降反映了模型的性能提高,因此我们希望通过调整模型参数使损失函数尽可能持续下降。具体来说:
- 反映模型拟合度:损失函数值越小,说明模型在训练数据上的拟合程度越高,预测误差越小。
- 优化目标:在机器学习和深度学习中,我们的最终目标是训练出一个 尽可能准确 的模型,使得它对未见过的数据(测试数据或未来数据)具有较好的预测能力。为了达到这个目标,必须尽量 最小化损失函数,降低模型的误差。
- 梯度下降优化:优化过程的核心就是通过梯度下降法(或其变种)不断更新模型参数,以减少损失函数。每次更新时,都会使用损失函数来计算梯度,并沿着梯度的方向调整参数。
- 避免过拟合或欠拟合:通过不断调整模型参数(如网络层、权重等),让损失函数下降,可以防止模型在训练数据上产生过拟合或欠拟合。过拟合是指模型在训练数据上表现很好,但在新数据(测试数据)上表现差;欠拟合则是指模型的表达能力不足,无法有效地拟合训练数据。
模型的拟合度(Model Fit)指的是模型在训练数据上的表现程度,衡量模型能够多好地捕捉训练数据中的规律和模式。拟合度越高,表示模型能够更精确地预测训练数据中的目标变量。具体来说:
- 高拟合度:模型能够准确地预测训练数据中的结果,误差较小。这通常意味着模型的复杂度较高,可以很好地表达数据中的模式和关系。然而,过高的拟合度可能导致过拟合,即模型过度依赖训练数据中的噪声,不能很好地推广到新数据。
- 低拟合度:模型不能很好地拟合训练数据,误差较大。这通常表明模型过于简单,无法捕捉数据的复杂规律,可能存在欠拟合现象。欠拟合的模型通常表现出较高的训练误差和较低的泛化能力。
为了避免过拟合和欠拟合,常通过调整模型的复杂度、损失函数、训练数据的量和质量、正则化方法等,来优化模型的拟合度,使其既能在训练集上取得较好的结果,又能在测试集或实际应用中具有较好的预测能力。
梯度下降是通过不断调整参数来最小化损失函数,最终使模型学习到最优的参数,从而提高预测准确性。假设你正在训练一个神经网络,并且已经得到了初始的参数(例如权重)。你计算出当前参数下的损失函数值(比如MSE损失)。接下来,你计算每个参数的梯度(即每个权重对损失函数的影响)。然后,你根据这些梯度调整权重,使得损失函数逐渐减小,模型预测更加准确。这个过程重复进行,直到损失函数的值降到足够小为止。
1-3. 损失函数下降的目标
- 模型优化:每次调整参数时,我们希望通过梯度下降法(或其他优化算法)最小化损失函数。这是因为只有在训练过程中,模型的误差不断下降,才能有效地提高模型的预测性能。
- 收敛与稳定性:损失函数在训练过程中逐渐减少,通常是模型朝着最佳解(即最小化误差)收敛的标志。若损失函数在多个训练轮次中持续下降,表明模型已经开始稳定地找到最优的参数。
- 防止欠拟合和过拟合:当损失函数 持续下降 到一个较低的值时,通常说明模型在训练集上拟合得较好。如果损失函数长时间不下降,可能表明模型无法有效拟合数据,产生了 欠拟合。如果损失函数持续下降,并且在训练集和测试集上都表现良好,模型可能会很好地泛化,避免 过拟合。
1-4. 损失函数下降的具体作用
- 减少误差:损失函数的值反映了模型的预测值与真实值之间的误差。通过不断降低损失函数,我们希望减少模型的误差,使其预测更加精确。
- 训练收敛:训练中的优化目标是让损失函数趋于最小。随着训练轮次的增加,损失值应当逐渐减少,模型的参数也会越来越接近最优解。损失函数达到某个极小值时,表示训练收敛,模型已经学到了数据中的规律。
- 提高泛化能力:一个低损失函数值通常意味着模型不仅在训练集上表现好,同时也在未见过的数据上(例如验证集或测试集)具有较好的预测能力。这有助于提升模型的 泛化能力。
1-5. 如何让损失函数持续下降
让损失函数持续下降通常依赖于以下几个因素:
- 合理的学习率(Learning Rate):学习率过大可能导致损失函数震荡或发散,学习率过小可能导致训练过程非常缓慢。通过调整学习率,可以使得梯度下降更加平稳,使得损失函数持续下降。
- 优化器选择:不同的优化器(如SGD、Adam、RMSprop等)会影响训练过程中的参数更新方式,进而影响损失函数的下降速度。Adam优化器通常能加速训练并使得损失函数下降得更快。
- 模型架构:模型的复杂度(层数、神经元数量等)也影响损失函数的下降速度。如果模型太简单,可能无法捕捉数据的复杂性,导致损失函数下降缓慢或者停滞。如果模型过于复杂,则可能导致过拟合,使损失函数在测试数据上不下降。
- 数据预处理:合适的数据处理方式(如标准化、归一化、去噪等)可以加速训练过程,让损失函数更快速地下降。
- 训练轮次(Epochs):适当增加训练轮次可以帮助模型有更多的机会去优化参数,从而让损失函数继续下降。
2. 常见的损失函数
-
均方误差损失(MSE):
想象你在玩一个扔球进篮子的游戏,而篮子的大小就是均方误差损失。你每次扔球,球与篮子中心的距离平方就是你的得分。游戏的目标是尽可能让得分低,也就是让球尽可能接近篮子中心。在深度学习中,均方误差损失函数计算预测值与实际值之间差的平方的平均值,常用于回归问题。 -
交叉熵损失(Cross-Entropy Loss):
想象你在玩一个猜谜游戏,每次猜测后,系统会告诉你猜测结果与正确答案之间的差异。交叉熵损失就是这样一个函数,它衡量的是模型输出的概率分布与真实标签的概率分布之间的差异。在分类问题中,当我们有多个类别时,交叉熵损失是首选的损失函数。 -
Hinge损失(Hinge Loss):
想象你在玩一个挥剑砍靶的游戏,目标是让剑刃尽可能地砍进靶心。Hinge损失函数用于支持向量机(SVM)等最大间隔分类器,它鼓励模型产生更大的间隔,以提高分类的鲁棒性。 -
绝对值损失(Absolute Loss):
想象你在玩一个射箭游戏,目标是射中靶心,而靶心的半径就是绝对值损失。你的箭与靶心的距离越小,得分越低。绝对值损失计算预测值与实际值之间差的绝对值的平均值,它对异常值的敏感度低于均方误差损失。
3. 损失函数代码使用示例
通过以下一个示例,我们不断的优化参数,调整训练方式,来逐步使得损失函数下降的方法
【注意】:每次的参数调整只是一个调整探索过程,并不是调整后的参数一定为最优解,通过示例为了体会这个调参的过程,如何逐渐的去使得损失函数下降
demo_reg.py 功能介绍:
1.数据获取与预处理:代码首先从UCI机器学习库(archive.ics.uci.edu)获取波士顿房价数据集,对数据进行清洗(去除多余空格),并将清洗后的数据保存到本地文件housing.data中。
2.数据加载与分割:使用numpy加载本地文件,并提取特征变量x和目标变量y,然后将数据分为训练集和测试集。
3.模型定义:定义一个简单的线性神经网络模型Net,包含一个线性层用于预测。
4.模型训练:使用均方误差损失函数(MSELoss)和随机梯度下降优化器(SGD)训练模型,共迭代10000次,并在每次迭代后打印损失值和部分预测值与实际值。
注意事项:
1.确保网络连接正常,以便成功从UCI机器学习库获取数据。
2.确保数据文件housing.data可以正确保存到本地,并且路径正确。
3.确保模型训练时的数据形状一致,以避免广播问题导致的警告。
完整代码如下:demo_reg.py
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# @Project :demo_create
# @File :demo_reg.py
# @Time :2024-12-12 18:15
# @Author :wangting_666"""pip install torch -i https://mirrors.aliyun.com/pypi/simple/pip install requests -i https://mirrors.aliyun.com/pypi/simple/pip install numpy -i https://mirrors.aliyun.com/pypi/simple/
"""# 导入所需的库
import torch
import requests
import numpy as np
import re# 指定数据文件的URL
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data'
response = requests.get(url)
# 发送HTTP GET请求
if response.status_code == 200:# 请求成功,获取网页内容url_data = response.text# 按行分割数据lines = url_data.split('\n')processed_lines = []for line in lines:# 去除每行的首尾空白字符stripped_line = line.strip()if stripped_line:# 将多个连续空格替换为单个空格,并去除首尾空白字符processed_line = re.sub(r'\s{2,}', ' ', line).strip()processed_lines.append(processed_line)# 将处理后的数据行合并为一个字符串,每行之间用换行符分隔url_data = '\n'.join(processed_lines)# 指定本地文件名filename = 'housing.data'# 将处理后的数据写入本地文件with open(filename, 'w') as f:f.write(url_data)print('Data saved to {}'.format(filename))
else:# 请求失败,打印错误信息print('Failed to retrieve data')# 使用numpy加载本地文件
data = np.loadtxt('housing.data')
# 506行,14列数据
print("data.shape: {}".format(data.shape))# 提取目标变量y和特征变量x
# data 数组中提取最后一列数据,存储在变量 y 中。
y = data[:, -1]
# data 数组中提取除了最后一列之外的所有列,存储在变量 x 中。
x = data[:, 0:-1]# 将数据分为训练集和测试集
x_train = x[0:496, ...]
y_train = y[0:496, ...]
x_test = x[496:, ...]
y_test = y[496:, ...]# 打印训练集和测试集的形状
print("x_train.shape: {}".format(x_train.shape))
print("y_train.shape: {}".format(y_train.shape))
print("x_test.shape: {}".format(x_test.shape))
print("y_test.shape: {}".format(y_test.shape))# 定义神经网络模型
class Net(torch.nn.Module):def __init__(self, n_features, n_output):super(Net, self).__init__()# 定义一个线性层,用于预测self.predict = torch.nn.Linear(n_features, n_output)def forward(self, x):# 前向传播out = self.predict(x)return out# 实例化模型
net = Net(13, 1)
# 定义损失函数
loss_func = torch.nn.MSELoss()# 定义优化器
optimizer = torch.optim.SGD(net.parameters(), lr=0.0001)# 训练模型
for i in range(10000):# 将训练数据转换为PyTorch张量x_data = torch.tensor(x_train, dtype=torch.float32)y_data = torch.tensor(y_train, dtype=torch.float32)# 前向传播,计算预测值pred = net.forward(x_data)# 计算损失loss = loss_func(pred, y_data) * 0.001# 清空梯度optimizer.zero_grad()# 反向传播,计算梯度loss.backward()# 更新模型参数optimizer.step()# 每轮迭代后打印损失和部分预测值、实际值print("item:{},loss:{}".format(i, loss.item()))print(pred[0:10])print(y_data[0:10])
最后item输出损失函数结果(11.82%):loss:0.11819077283143997
item:9999,loss:0.11819077283143997
tensor([[22.0104],[20.1129],[22.3382],[22.9463],[21.9336],[21.3733],[21.1441],[17.4917],[14.9874],[18.2216]], grad_fn=<SliceBackward0>)
tensor([24.0000, 21.6000, 34.7000, 33.4000, 36.2000, 28.7000, 22.9000, 27.1000,16.5000, 18.9000])
3-1. 调整学习率 (Learning Rate)
通过调整学习率来优化,目前使用的学习率lr=0.001,这可能会导致模型训练得较慢。可以尝试增大学习率来加速训练,或者使用更适合的值。可以尝试以下几种调整:
- 尝试
0.001
或0.01
。 - 过高的学习率可能会导致发散,可以逐步减小。
# optimizer = torch.optim.SGD(net.parameters(), lr=0.0001)
optimizer = torch.optim.SGD(net.parameters(), lr=0.001)
最后item输出损失函数结果(9.47%):item:9999,loss:0.09471820294857025
item:9999,loss:0.09471820294857025
tensor([[22.1652],[21.6274],[19.9424],[19.1086],[19.8691],[20.0128],[22.4789],[24.8061],[26.4139],[23.9335]], grad_fn=<SliceBackward0>)
tensor([24.0000, 21.6000, 34.7000, 33.4000, 36.2000, 28.7000, 22.9000, 27.1000,16.5000, 18.9000])
3-2. 调整损失函数权重
当前在计算损失时将结果乘以了一个常数 0.001
,这会影响损失的计算。可以尝试不同的乘法因子,看看是否能改善模型表现。比如,将 0.001
改为 0.0001
。
# 计算损失
# loss = loss_func(pred, y_data) * 0.001
loss = loss_func(pred, y_data) * 0.0001
最后item输出损失函数结果(1.07%):loss:0.0107608987018466
item:9999,loss:0.0107608987018466
tensor([[24.8059],[21.2679],[21.0506],[20.6933],[20.7666],[21.0484],[21.9299],[22.2718],[19.4872],[21.5408]], grad_fn=<SliceBackward0>)
tensor([24.0000, 21.6000, 34.7000, 33.4000, 36.2000, 28.7000, 22.9000, 27.1000,16.5000, 18.9000])
3-3. 增加训练轮数 (Epochs)
目前代码中训练轮数为 10000
次。如果你觉得模型在 10000
次迭代后仍未达到最优结果,可以适当增加训练轮数。例如,增加到 20000
或 30000
,并观察损失函数是否持续下降。
# for i in range(10000):
for i in range(30000):
最后item输出损失函数结果(0.93%):loss:0.00932362861931324
item:29999,loss:0.00932362861931324
tensor([[22.3280],[22.3310],[22.1053],[20.9865],[21.1635],[21.2615],[21.4697],[22.1821],[20.5868],[21.7904]], grad_fn=<SliceBackward0>)
tensor([24.0000, 21.6000, 34.7000, 33.4000, 36.2000, 28.7000, 22.9000, 27.1000,16.5000, 18.9000])
3-4. 使用更高级的优化器(优化器调整)
当前使用的是 SGD(随机梯度下降),尽管它是最基础的优化器,但它可能在某些问题上收敛较慢,尤其是当损失函数比较复杂时。你可以尝试使用 Adam 优化器,它通常比 SGD 更有效,能加速训练并避免过拟合。
SGD:标准的梯度下降方法,适用于较简单的任务,收敛速度较慢且容易陷入局部最小值。
Adam:结合了动量和自适应学习率调整,通常能在复杂问题中更快收敛,避免过拟合。
学习率过大会导致模型训练不稳定,过小则会导致收敛缓慢。调整学习率可以帮助模型快速收敛
# optimizer = torch.optim.SGD(net.parameters(), lr=0.0001)
optimizer = torch.optim.Adam(net.parameters(), lr=0.001)
最后item输出损失函数结果(0.86%):loss:0.008578178472816944
item:29999,loss:0.008578178472816944
tensor([[22.4775],[22.4890],[22.7133],[22.8217],[22.9005],[22.6268],[22.3341],[22.4805],[22.4585],[22.4555]], grad_fn=<SliceBackward0>)
tensor([24.0000, 21.6000, 34.7000, 33.4000, 36.2000, 28.7000, 22.9000, 27.1000,16.5000, 18.9000])
3-5. 使用更复杂的损失函数
尽管 MSELoss 是回归任务中的标准损失函数,但有时候可以根据任务的特性尝试其他损失函数。例如,Huber Loss 对于一些数据中的异常值更具鲁棒性,可以尝试替换掉 MSELoss
# loss_func = torch.nn.MSELoss()
loss_func = torch.nn.HuberLoss(delta=1.0)
最后item输出损失函数结果(0.06%):loss:0.0006132011767476797
item:29999,loss:0.0006132011767476797
tensor([[21.1054],[21.1156],[21.3443],[21.4555],[21.5352],[21.2573],[20.9581],[21.1065],[21.0816],[21.0821]], grad_fn=<SliceBackward0>)
tensor([24.0000, 21.6000, 34.7000, 33.4000, 36.2000, 28.7000, 22.9000, 27.1000,16.5000, 18.9000])
通过以上的示例,可以看到损失值降低的办法非常多,是一个持续优化的过程。
相关文章:
深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...

Vue3+Node中使用webrtc推流至mediamtx
前言 项目的 Web 端是 Vue3 框架,后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端,而我自己从未有媒体流相关经验,最初 leader 让我尝试通过 RTSP 协议推拉流,我的思路就局限在了 RTSP 方向。 最初使用的服务端…...

React 内置的Hook学习
useState:管理组件状态 useState 是一个用于在函数组件中添加状态的 Hook。它允许你在函数组件中声明一个状态变量,并提供一个更新该状态的方法,其中与组件生命周期的关系: 初始化:当组件首次渲染时,useS…...

Flutter Navigator2.0的原理和Web端实践
01 背景与动机 在Navigator 2.0推出之前,Flutter主要通过Navigator 1.0和其提供的 API(如push(), pop(), pushNamed()等)来管理页面路由。然而,Navigator 1.0存在一些局限性,如难以实现复杂的页面操作(如移…...

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容
uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…...

【HF设计模式】03-装饰者模式
声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第3章笔记:结合示例应用和代码,介绍装饰者模式,包括遇到的问题、遵循的 OO 原则、达到的效果。 …...
【人工智能-中级】模型部署与优化:从本地实验到云端与边缘部署
模型部署与优化:从本地实验到云端与边缘部署 在机器学习和深度学习模型训练完成后,如何高效、稳定地将模型部署到生产环境中,是实际应用中的关键环节。模型部署不仅涉及技术实现,还需要考虑性能优化、资源管理和安全性等多方面因素。本文将全面探讨模型部署与优化的相关内…...
Jenkins 编写Pipeline 简介及使用初识详解
一、Jenkins Pipeline简介 Jenkins Pipeline是Jenkins的一个重要功能,Jenkins 2.0 以上才会有,一系列 Jenkins 插件将整个持续集成用解释性代码 Jenkinsfile 来描述,它允许开发者以代码的方式定义整个持续集成和交付(CI/CD)流程,包括构建、测试、部署和监控等步骤。Jenk…...

uboot移植网络驱动过程,无法ping通mx6ull和ubuntu问题解决方案
开发板:mx6ull-ALPHA_V2.4 ubuntu版本:20.04 1.现在虚拟机设置中添加网路适配器用于开启桥接模式 2.在编辑中打开“虚拟网络编辑器” 我的电脑本身只有VMnet1和VMnet8,需要底下“添加网络”,增加这个VMnet0 ,并且进行…...

精准预测美国失业率和贫困率,谷歌人口动态基础模型PDFM已开源,可增强现有地理空间模型
疾病、经济危机、失业、灾害……人类世界长期以来被各种各样的问题「侵扰」,了解人口动态对于解决这类复杂的社会问题至关重要。 政府相关人员可以通过人口动态数据来模拟疾病的传播,预测房价和失业率,甚至预测经济危机。然而,在过…...
C#速成(文件读、写操作)
导包 using System.IO;1、写入文件(重要) StreamWriter sw new StreamWriter("C:\Users\29674\Desktop\volumn.txt");//创建一个TXT的文件 sw.WriteLine(textBox2.Text);//写入文件的内容 sw.Close();//关闭2、读取文件(不重要&…...

SQL server学习03-创建和管理数据表
目录 一,SQL server的数据类型 1,基本数据类型 2,自定义数据类型 二,使用T-SQL创建表 1,数据完整性的分类 2,约束的类型 3,创建表时创建约束 4,任务 5,由任务编写…...

【UE5 “RuntimeLoadFbx”插件】运行时加载FBX模型
前言 为了解决在Runtime时能够直接根据FBX模型路径直接加载FBX的问题,推荐一款名为“RuntimeLoadFBX”的插件。 用法 插件用法如下,只需要指定fbx的地址就可以在场景中生成Actor模型 通过指定输入参数“Cal Collision”来设置FBX模型的碰撞 还可以通过…...

【潜意识Java】深入理解 Java 面向对象编程(OOP)
目录 什么是面向对象编程(OOP)? 1. 封装(Encapsulation) Java 中的封装 2. 继承(Inheritance) Java 中的继承 3. 多态(Polymorphism) Java 中的多态 4. 抽象&…...
windows同时使用多个网卡
windows同时链接了有线网络,多个无线网卡,默认会使用有线网络,如果想要局域网内使用某个特定的网络,可以设置静态ip 1. 首先删除原来的静态网络(不冲突可以不删除),我这里usb无线网卡切换过usb插口,这里需要删除原来的. 使用 route print 查看接口列表及静态路由信息 route p…...

Spark执行计划解析后是如何触发执行的?
在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...
B4X编程语言:B4X控件方法汇总
1、AddNode、AddView方法 AddNode(Node As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J控件 AddView(View As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J的B4XView …...

基于XML配置Bean和基于XML自动装配
目录 基于XML配置Bean id分配规则 通过id获取bean 通过类型获取bean 通过C命名空间配置bean 使用C命名空间 通过P命名空间配置bean 通过util:list进行配置bean 指定id,直接ref引用过来 通过外部属性文件配置Bean Bean信息重用(继承)…...
全排列 dfs
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有 a<b<…<y<z ,而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入格式 输入只有一行,是一个由不同的小写字母组成的字符串…...
linux内存相关命令的尝试
文章目录 前言freeMem 部分的解释Swap 部分的解释 vmstatProcs (进程)Memory (内存)Swap (交换)IO (磁盘 I/O)System (系统)CPU (处理器) pidstat标题行解释数据列解释 sar字段含义解释示例分析 总结 前言 菜就多练,昨天看了一篇有关剖析 RocksDB 内存超限问题的文…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...