从头学 | 目标函数、梯度下降相关知识笔记(一)
很多基本的概念最近忘的有点多,简单回顾一些
文章目录
- 1 目标函数、梯度下降
- 1.1 回归模型中的目标函数
- 1.1.1 回归任务目标函数
- (1) 均方误差(MSE)
- (2) Huber损失
- 1.1.2 分类任务目标函数
- (1) 交叉熵损失(Cross-Entropy)
- (2) 对数损失(Log Loss)
- 1.1.3 正则化项导数
- (1) L2正则化
- (2) L1正则化
- 1.2 梯度下降的更新原理
- 1.2.1 批量梯度下降(BGD)与随机梯度下降(SGD)
- 1.3 导数的意义
- 2 python代码案例
- 2.1 简单的单变量二次函数优化
- 2.2 多变量二次函数优化
- 2.3 多目标函数优化
- 2.4 线性回归(均方误差优化)
- 2.5 带L2正则化的逻辑回归
1 目标函数、梯度下降
1.1 回归模型中的目标函数
在回归模型中,目标函数(即损失函数)通常设定为均方误差(MSE),其数学形式为:
导数形态为:
∂ L ∂ y ^ i = 2 N ( y i − y ^ i ) \frac{\partial L}{\partial \hat{y}_i} = \frac{2}{N}(y_i - \hat{y}_i) ∂y^i∂L=N2(yi−y^i)
MSE通过计算预测值与真实值的平均平方距离,将模型的“好坏”转化为可量化的数值。误差越小,模型拟合数据的能力越强。
回归模型的目标函数符合凸函数特性:
- 凸函数特性:在线性回归中,损失函数是凸函数,梯度下降能收敛到全局最优解;
- 非凸问题:在复杂模型(如神经网络)中,可能陷入局部最优,需通过调整学习率或初始化策略改进。
一些其他常见的目标函数:
目标函数 | 导数特性 | 算法影响 |
---|---|---|
MSE | 线性梯度,随误差增大而增强 | 易受异常值干扰,收敛震荡 |
交叉熵 | 梯度与误差直接相关 | 适合概率优化,收敛稳定 |
Huber损失 | 分段线性/恒定梯度 | 鲁棒性强,抗噪声能力优异 |
L1正则化 | 非连续梯度(符号函数) | 导致参数稀疏化,特征选择 |
1.1.1 回归任务目标函数
(1) 均方误差(MSE)
定义:
L = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 L = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2 L=N1i=1∑N(yi−y^i)2
导数:
∂ L ∂ y ^ i = 2 N ( y i − y ^ i ) \frac{\partial L}{\partial \hat{y}_i} = \frac{2}{N}(y_i - \hat{y}_i) ∂y^i∂L=N2(yi−y^i)
特点:导数值与预测误差呈线性关系,对异常值敏感
(2) Huber损失
定义:分段函数( δ \delta δ为阈值参数)
L = { 1 2 ( y − y ^ ) 2 ∣ y − y ^ ∣ ≤ δ δ ∣ y − y ^ ∣ − 1 2 δ 2 ∣ y − y ^ ∣ > δ L = \begin{cases} \frac{1}{2}(y-\hat{y})^2 & |y-\hat{y}| \leq \delta \\ \delta|y-\hat{y}| - \frac{1}{2}\delta^2 & |y-\hat{y}| > \delta \end{cases} L={21(y−y^)2δ∣y−y^∣−21δ2∣y−y^∣≤δ∣y−y^∣>δ
导数:
∂ L ∂ y ^ = { − ( y − y ^ ) ∣ y − y ^ ∣ ≤ δ − δ ⋅ sign ( y − y ^ ) ∣ y − y ^ ∣ > δ \frac{\partial L}{\partial \hat{y}} = \begin{cases} -(y-\hat{y}) & |y-\hat{y}| \leq \delta \\ -\delta \cdot \text{sign}(y-\hat{y}) & |y-\hat{y}| > \delta \end{cases} ∂y^∂L={−(y−y^)−δ⋅sign(y−y^)∣y−y^∣≤δ∣y−y^∣>δ
特点:结合MSE和MAE优点,对离群值鲁棒
1.1.2 分类任务目标函数
(1) 交叉熵损失(Cross-Entropy)
定义(二分类):
L = − 1 N ∑ i = 1 N [ y i log y ^ i + ( 1 − y i ) log ( 1 − y ^ i ) ] L = -\frac{1}{N} \sum_{i=1}^N [y_i \log \hat{y}_i + (1-y_i)\log(1-\hat{y}_i)] L=−N1i=1∑N[yilogy^i+(1−yi)log(1−y^i)]
导数(Sigmoid激活时):
∂ L ∂ z i = y ^ i − y i \frac{\partial L}{\partial z_i} = \hat{y}_i - y_i ∂zi∂L=y^i−yi
特点:梯度与预测概率偏差直接相关,适合概率输出场景
(2) 对数损失(Log Loss)
定义(多分类):
L = − 1 N ∑ i = 1 N ∑ c = 1 C y i , c log y ^ i , c L = -\frac{1}{N} \sum_{i=1}^N \sum_{c=1}^C y_{i,c} \log \hat{y}_{i,c} L=−N1i=1∑Nc=1∑Cyi,clogy^i,c
导数(Softmax激活时):
∂ L ∂ z j = y ^ j − y j \frac{\partial L}{\partial z_j} = \hat{y}_j - y_j ∂zj∂L=y^j−yj
特点:梯度体现预测概率与真实标签的差异
1.1.3 正则化项导数
- L1正则化:菱形的角点更容易与等高线相切。例如,若原始最优解在菱形外,正则化后的解会落在菱形的顶点(如坐标轴上),导致某些参数为0。
- L2正则化:圆形的边界与等高线相切时,切点通常不在坐标轴上,因此参数整体被压缩但不会稀疏。
特性 | L1正则化 | L2正则化 |
---|---|---|
目标函数惩罚项 | 绝对值之和((\sum |\theta_j|)) | 平方和((\sum \theta_j^2)) |
参数更新方向 | 趋向于零 | 趋向于缩小但非零 |
特征选择能力 | 强(稀疏性) | 弱(平滑性) |
适用场景 | 高维特征选择、模型压缩 | 防止过拟合、处理共线性 |
(1) L2正则化
定义:
R = λ 2 ∥ θ ∥ 2 R = \frac{\lambda}{2} \|\theta\|^2 R=2λ∥θ∥2
导数:
∂ R ∂ θ j = λ θ j \frac{\partial R}{\partial \theta_j} = \lambda \theta_j ∂θj∂R=λθj
特点:导数为线性,导致参数收缩效应
L2正则化的解空间是圆形,参数被限制在一个圆形区域内,最优解通常出现在边界上的非角点位置,参数值较小但非零,整体分布平滑。
(2) L1正则化
定义:
R = λ ∥ θ ∥ 1 R = \lambda \|\theta\|_1 R=λ∥θ∥1
因为此时Loss求解空间(就是导数)是菱形,参数被限制在一个菱形区域内,最优解倾向于出现在菱形的顶点(即坐标轴上),导致某些参数为0,产生稀疏性。
导数:
∂ R ∂ θ j = λ ⋅ sign ( θ j ) \frac{\partial R}{\partial \theta_j} = \lambda \cdot \text{sign}(\theta_j) ∂θj∂R=λ⋅sign(θj)
特点:导数为常数,产生稀疏解
1.2 梯度下降的更新原理
通过沿目标函数梯度(下降最快方向)的负方向逐步调整参数,使损失函数最小化。
也就是沿着函数公式的导数方向,进行迭代运算。
如果在回归模型当中就是回归系数W与截距项B在不断变化,
来寻找均方误差达到最小值时候,W、B分别是什么。
其参数更新公式为:
梯度下降的步骤是:
- 1.随机选择一个起点(初始参数值);
- 2.观察四周最陡的下坡方向(计算梯度);
- 3.迈出一步(调整参数);
- 4.重复直到到达山谷底部(损失函数最小)。
1.2.1 批量梯度下降(BGD)与随机梯度下降(SGD)
BGD:每次参数更新需要遍历所有样本,计算整体数据的平均梯度。
白话:就像考试前把整本教材复习一遍再调整学习方法,虽然全面但耗时长。
SGD:每次随机选择一批batch_size样本计算梯度,立刻更新参数。
白话:像边做题边改错,每做一道题就调整一次思路,速度快但容易受个别难题影响。
Mini-Batch SGD的常见实践:实际应用中,更常用的是小批量梯度下降(Mini-Batch SGD),即每次从打乱后的数据中按固定步长抽取一批样本(如32、64个)。例如网页4的代码若修改为
for i in range(0, m, batch_size):batch = X_b[i:i+batch_size] # 抽取小批量
1.3 导数的意义
导数(尤其是梯度)是梯度下降类优化算法的基础。
通过计算目标函数关于模型参数的偏导数,可以确定 参数更新方向与步长。!!!
例如:
- 梯度下降:参数更新公式为 θ k + 1 = θ k − α ∇ θ L ( θ k ) \theta_{k+1} = \theta_k - \alpha \nabla_\theta L(\theta_k) θk+1=θk−α∇θL(θk),其中梯度 ∇ θ L \nabla_\theta L ∇θL 由导数计算得到
- 自适应优化器:如Adam、RMSProp等算法依赖梯度的一阶矩和二阶矩统计量
下面贴一个python关于f(x) = x^2 的案例:
import numpy as np
import matplotlib.pyplot as plt
import copydef f(x):return x**2def df(x):return 2*xdef gradient_descent(x0, lr=0.1, tol=1e-6, max_iter=1000):x = x0history = [x]for _ in range(max_iter):_x = copy.deepcopy(x)grad = df(x)if abs(grad) < tol:breakx -= lr * grad # lr-学习率history.append(x)print(f' 原来的x-{round(_x,4)}; x求导值-{round(grad,4)}; 更新x-{round(x,4)} ')return x, np.array(history)# 参数设置
x0 = 10.0
x_min, history = gradient_descent(x0)# 可视化
plt.plot(history, f(history), 'ro-', markersize=3)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Gradient Descent for f(x)=x²')
plt.show()
print(f"最优解 x = {x_min:.6f}")
可以看到:
grad = df(x)
x -= lr * grad # lr-学习率
通过df(x)
计算得到了gradient梯度之后,会更新x,其中LR是学习率
其他:
神经网络中反向传播的数学基础
在神经网络中,导数通过链式法则实现误差的逐层反向传播:
- 计算损失函数对输出层权重的偏导数 ∂ L ∂ W ( L ) \frac{\partial L}{\partial W^{(L)}} ∂W(L)∂L
- 通过递归计算隐层权重梯度 ∂ L ∂ W ( l ) = ∂ L ∂ z ( l ) ⋅ ∂ z ( l ) ∂ W ( l ) \frac{\partial L}{\partial W^{(l)}} = \frac{\partial L}{\partial z^{(l)}} \cdot \frac{\partial z^{(l)}}{\partial W^{(l)}} ∂W(l)∂L=∂z(l)∂L⋅∂W(l)∂z(l),其中 z ( l ) z^{(l)} z(l) 为第 l l l层输出
模型特征选择与可解释性
- 通过计算特征对损失的偏导数 ∂ L ∂ x i \frac{\partial L}{\partial x_i} ∂xi∂L,可量化特征重要性(如Integrated Gradients方法)
- 导数形态分析可揭示模型决策边界特性(如ReLU激活函数的梯度稀疏性)
2 python代码案例
2.1 简单的单变量二次函数优化
import numpy as np
import matplotlib.pyplot as plt
import copy# 原来函数
def f(x):return x**2# 求导函数
def df(x):return 2*x# 梯度下降函数
def gradient_descent(x0, lr=0.1, tol=1e-6, max_iter=1000):x = x0history = [x]for _ in range(max_iter):_x = copy.deepcopy(x)grad = df(x)if abs(grad) < tol:breakx -= lr * grad # lr-学习率history.append(x)print(f' 原来的x-{round(_x,4)}; x求导值-{round(grad,4)}; 更新x-{round(x,4)} ')return x, np.array(history)# 参数设置
x0 = 10.0
x_min, history = gradient_descent(x0)# 可视化
plt.plot(history, f(history), 'ro-', markersize=3)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Gradient Descent for f(x)=x²')
plt.show()
print(f"最优解 x = {x_min:.6f}")
其中
x -= lr * grad # lr-学习率
很关键,就是在更新X,lr为学习率,grad为导数,因为一阶导是线性的,所以方向比较一致以及明显
2.2 多变量二次函数优化
def f(x, y):return x**2 + y**2def grad(x, y):return 2*x, 2*ydef multivariable_gd(x0, y0, lr=0.1, tol=1e-6, max_iter=1000):x, y = x0, y0history = [(x, y)]for _ in range(max_iter):gx, gy = grad(x, y)if np.sqrt(gx**2 + gy**2) < tol:breakx -= lr * gxy -= lr * gyhistory.append((x, y))return (x, y), np.array(history)# 参数设置
x0, y0 = 5.0, -3.0
(x_min, y_min), history = multivariable_gd(x0, y0)# 可视化
X, Y = np.meshgrid(np.linspace(-6,6,100), np.linspace(-6,6,100))
Z = f(X, Y)
plt.contour(X, Y, Z, levels=20)
plt.plot(history[:,0], history[:,1], 'r.-', markersize=5)
plt.title('Multi-variable GD Path')
plt.show()
print(f"最优解 (x, y) = ({x_min:.6f}, {y_min:.6f})")
跟单变量二次函数类似,此时是两个参数求偏导,然后分别进行更新
x -= lr * gxy -= lr * gy
2.3 多目标函数优化
def f(x):return x**2 + (x-2)**2def df(x):return 2*x + 2*(x-2) # 两个目标函数的梯度之和def multi_objective_gd(x0, lr=0.1, tol=1e-6, max_iter=1000):x = x0history = [x]for _ in range(max_iter):grad = df(x)if abs(grad) < tol:breakx -= lr * gradhistory.append(x)return x, np.array(history)# 运行与可视化
x0 = 5.0
x_min, history = multi_objective_gd(x0)
plt.plot(history, label='x trajectory')
plt.axhline(1, color='gray', linestyle='--', label='True minimum')
plt.xlabel('Iteration')
plt.ylabel('x')
plt.legend()
plt.show()
print(f"最优解 x = {x_min:.6f}")
相对来说,就是跟单变量二次函数类似,就是求导的时候,公式会兼顾多个目标,曲线迭代的过程跟单变量二次类似
2.4 线性回归(均方误差优化)
导数:
∂ L ∂ y ^ i = 2 N ( y i − y ^ i ) \frac{\partial L}{\partial \hat{y}_i} = \frac{2}{N}(y_i - \hat{y}_i) ∂y^i∂L=N2(yi−y^i)
特点:导数值与预测误差呈线性关系,对异常值敏感
# 生成模拟数据
np.random.seed(42)
X = np.linspace(0, 10, 100)
y = 2*X + 3 + np.random.randn(100)*2def mse_loss(w, b, X, y):return np.mean((y - (w*X + b))**2)def gradient(w, b, X, y):dw = -2 * np.mean(X*(y - (w*X + b)))db = -2 * np.mean(y - (w*X + b))return dw, dbdef linear_regression_gd(w0=0, b0=0, lr=0.01, max_iter=1000):w, b = w0, b0loss_history = []for _ in range(max_iter):dw, db = gradient(w, b, X, y)w -= lr * dwb -= lr * dbloss_history.append(mse_loss(w, b, X, y))return (w, b), loss_history# 训练与可视化
(w_opt, b_opt), losses = linear_regression_gd()
plt.plot(losses)
plt.xlabel('Iterations')
plt.ylabel('MSE Loss')
plt.title('Linear Regression Training')
plt.show()
print(f"最优参数:w={w_opt:.2f}, b={b_opt:.2f}")
更新回归系数以及截距项,梯度求解过程跟之前类似:
def gradient(w, b, X, y):dw = -2 * np.mean(X*(y - (w*X + b)))db = -2 * np.mean(y - (w*X + b))return dw, db
dw, db = gradient(w, b, X, y)
w -= lr * dw
b -= lr * db
2.5 带L2正则化的逻辑回归
导数:
∂ R ∂ θ j = λ θ j \frac{\partial R}{\partial \theta_j} = \lambda \theta_j ∂θj∂R=λθj
特点:导数为线性,导致参数收缩效应
from sklearn.datasets import make_classification# 生成二分类数据
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0)
y = y*2 -1 # 标签转为±1def sigmoid(z):return 1 / (1 + np.exp(-z))def l2_regularized_loss(w, X, y, lambda_=0.1):z = np.dot(X, w)loss = np.mean(np.log(1 + np.exp(-y*z))) + lambda_ * np.sum(w**2)grad = -np.mean((y * X.T * sigmoid(-y*z)).T, axis=0) + 2*lambda_*wreturn loss, graddef logistic_gd(X, y, lr=0.1, lambda_=0.1, max_iter=1000):w = np.zeros(X.shape[1](@ref)loss_history = []for _ in range(max_iter):loss, grad = l2_regularized_loss(w, X, y, lambda_)w -= lr * gradloss_history.append(loss)return w, loss_history# 添加偏置项
X = np.hstack([X, np.ones((X.shape[0],1))])
w_opt, losses = logistic_gd(X, y)# 可视化训练过程
plt.plot(losses)
plt.xlabel('Iterations')
plt.ylabel('Regularized Loss')
plt.title('Logistic Regression with L2 Regularization')
plt.show()
print(f"最终权重:{w_opt}")
逻辑回归是sigmod
相关文章:
从头学 | 目标函数、梯度下降相关知识笔记(一)
很多基本的概念最近忘的有点多,简单回顾一些 文章目录 1 目标函数、梯度下降1.1 回归模型中的目标函数1.1.1 回归任务目标函数(1) 均方误差(MSE)(2) Huber损失 1.1.2 分类任务目标函数(1) 交叉熵损失(Cross-Entropy)(2…...
欣佰特携数十款机器人相关前沿产品,亮相第二届人形机器人和具身智能行业盛会
2025年4月15日至16日,备受关注的第二届中国人形机器人与具身智能产业大会已在北京成功举行。作为国内前沿科技及产品服务领域的重要参与者,欣佰特科技携众多前沿产品精彩亮相,全方位展示了其在人形机器人与具身智能领域的创新产品。 在本次大…...
QT常见显示类控件及其属性
Label QLabel可用用来显示文本和图片 核心属性如下 文本格式---textFormat 例: 在ui界面创建3个label,分别用不同的显示格式 在构造函数进行文本格式和文内容设置 此时运行后三种显示格式无区别 可以给富文本加标签 如<B>表示加粗 如果将<…...
基于领域知识的A型主动脉夹层综合分割及面向临床的评估|文献速递-深度学习医疗AI最新文献
Title 题目 Domain knowledge based comprehensive segmentation of Type-A aortic dissection with clinically-oriented evaluation 基于领域知识的A型主动脉夹层综合分割及面向临床的评估 01 文献速递介绍 A型主动脉夹层(TAAD)是一种医疗急症&a…...
守护进程编程、GDB调试以及外网连接树莓派
目录 一、什么是守护进程以及如何创建守护进程1. 什么是守护进程?2. 如何创建守护进程? 二、什么是GDB调试以及如何用GDB命令调试C程序1. 什么是GDB?2. 如何用GDB命令调试C程序? 三、外网访问树莓派 一、什么是守护进程以及如何创…...
HTML理论题
1.什么是HTML? 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 2.DOCTYPE 的作用是什么?标准与兼容模式(混杂模式)各有什么区别? DOCTYPE 的作用是告知浏览器的解析器用什么文档标准解析这个文档。 标准模式:用于…...
Cables为链上社区树立标杆:专注于实用性、用户主权与全球流动性
在 Web3 世界,“社区”这个词已逐渐沦为炒作、虚高数据与短暂参与的代名词。Cables 正在颠覆这一现状,以真实贡献与长期可持续发展为核心,走出了一条独特的路径。 最近,Cables 推出了其核心长期战略之一——积分计划(…...
Clickhouse 配置参考
Clickhouse 配置参考 适用版本 21.3.9.84 config.xml 配置 <?xml version"1.0"?> <!--NOTE: User and query level settings are set up in "users.xml" file. --> <yandex><access_control_path>/data/clickhouse/clickhous…...
thinkphp实现图像验证码
示例 服务类 app\common\lib\captcha <?php namespace app\common\lib\captcha;use think\facade\Cache; use think\facade\Config; use Exception;class Captcha {private $im null; // 验证码图片实例private $color null; // 验证码字体颜色// 默认配置protected $co…...
【Pandas】pandas DataFrame where
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
redis利用备忘录
fofa: icon_hash"864611937" 防护: redis的安全设置:设置完毕,需要重加载配置文件启动redis 1.绑定内网ip地址进行访问 2. requirepass设置redis密码 3.保护模式开启protected-mode开启(默认开启) 4.最好把…...
【dify实战】chatflow结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载
dify结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载 观看视频,您将学会 在dify下如何快速的构建一个chatflow,来完成数据分析工作;如何在AI的回复中展示可视化的图表;如何在AI 的回复中加入Excel报…...
医疗行业如何构建合成数据平台?——技术、合规与实践全景
目录 医疗行业如何构建合成数据平台?——技术、合规与实践全景 一、为什么医疗领域尤需合成数据? 二、平台功能全景图 ✅ 模块划分: 三、典型合成数据生成方式 1. 结构化病例合成 2. 医学图像生成 3. 多轮医生-患者问答合成 四、数据…...
6.8.最小生成树
一.复习: 1.生成树: 对于一个连通的无向图,假设图中有n个顶点,如果能找到一个符合以下要求的子图: 子图中包含图中所有的顶点,同时各个顶点保持连通, 而且子图的边的数量只有n-1条࿰…...
MATLAB 控制系统设计与仿真 - 37
范数鲁棒控制器的设计 鲁棒控制器的设计 根据双端子状态方程对象模型结构,控制器设计的目标是找到一个控制器K(s),它能保证闭环系统的范数限制在一个给定的小整数下,即 这时控制器的状态方程为: 其中X与Y分别为下面两个代数Riccati方程的解…...
社交媒体时代的隐私忧虑:聚焦Facebook
在数字化时代,社交媒体平台已成为人们日常生活的重要组成部分。Facebook作为全球最大的社交媒体之一,拥有数十亿用户,其对个人隐私的影响和忧虑也日益凸显。本文将探讨社交媒体时代下,尤其是Facebook平台上的隐私问题。 数据收集…...
9.Rust+Axum 测试驱动开发与性能优化全攻略
摘要 本文深入讲解 RustAxum 测试驱动开发及性能优化,涵盖多种测试工具与优化技术。 一、引言 在当今的软件开发领域,测试驱动开发(TDD)和性能优化是保障软件质量和性能的关键环节。Rust 作为一种安全、高效的系统编程语言&…...
中国首个全国34省3,667个城市多属性建筑数据集(屋顶、高度、结构、功能、风格、年龄、质量等属性)
中国首个全国34省3,667个城市多属性建筑数据集(屋顶、高度、结构、功能、风格、年龄、质量等属性) 数据介绍 快速获取三维(3D)建筑数据,包括屋顶、高度和方向等几何属性,以及功能、质量和年龄等指示性属性…...
探索Spring Boot Web模块:设计思想与技术实现
探索Spring Boot Web模块:设计思想与技术实现 在现代Web开发中,Spring Boot作为一个强大的框架,提供了丰富的功能来简化Web应用的开发。本文将深入探讨Spring Boot框架中Web模块的核心类,揭示其设计思想、技术实现以及扩展知识。…...
GitHub创建远程仓库
使用GitHub创建远程仓库:从零开始实现代码托管与协作 前言 在当今软件开发领域,版本控制系统已成为开发者必备的核心工具。作为分布式版本控制系统的代表,Git凭借其强大的分支管理和高效的协作能力,已成为行业标准。而GitHub作为…...
PLM系统如何支持利益相关者分析?沟通矩阵设计
PLM(产品生命周期管理)系统在现代企业的产品研发与管理过程中扮演着至关重要的角色。它不仅仅是一个管理产品数据的工具,更能在利益相关者分析以及沟通矩阵设计方面提供强大的支持。通过合理运用PLM系统,企业能够更好地识别、理解…...
每日一题(8) 求解矩阵最小路径和问题
给定一个m行n列的矩阵,从左上角开始每次只能向右或者向下移动,最后到达右下角的位置,路径上的所有数字累加起来作为这条路径的路径和。求所有路径和中最小路径和。 输入格式: 首先输入行数m及列数n,接下来输入m行,每…...
JAVA设计模式:注解+模板+接口
1.基础组件 1.1注解类控制代码执行启动、停止、顺序 /*** author : test* description : 数据同步注解* date : 2025/4/18*/ Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface SyncMeta {/*** 执行服务名称* return*/String name…...
如何在Linux系统中部署C++ Web应用
在 Linux 上部署 C Web 应用,和部署传统的 PHP 或 Node.js 应用相比更“原生”一些,通常涉及到自己编译、配置 Web 服务、处理依赖等。本文将详细讲解部署一个基于 C 编写的 Web 应用的完整流程,涵盖从构建、部署、到上线的每一步,…...
实用工具-screenrec介绍(截图工具)
官方地址:Communicate Faster with Instant Video Messages & Screenshots 官方下载安装包,安装完成后,默认快捷键 alt s 开启截图,录屏 介绍 ScreenRec 是一款免费无广告的屏幕录制与截图工具,支持多平台&…...
使用veaury,在vue项目中运行react组件
网上的信息太少了,记录一下 我的项目是vue3webpack 使用:veaury Veaury 是基于React和Vue3的工具库,主要用于React和Vue在一个项目中公共使用的场景,主要运用在项目迁移、技术栈融合的开发模式、跨技术栈使用第三方组件的场景。 参…...
开源 vs. 闭源:大模型的未来竞争格局
开源 vs. 闭源:大模型的未来竞争格局 引言 在人工智能领域,尤其是大型语言模型(LLM)的发展中,开源与闭源之争已成为决定行业未来走向的关键议题。随着ChatGPT的横空出世和开源模型的蓬勃发展,技术社区正经历着一场深刻的范式转变…...
pcl代码解析
一、库基础代码解析: PCL库基础:点云类型与算法详解-CSDN博客 主要介绍PCL库的一些基本的点云类型、相关数据类型以及ROS接口消息,和一些常用的算法。 用到的一些PCL点云类型 pcl::PointXYZ: 这是最简单也可能是最常用到的点类型;它只储存…...
中华传承-医山命相卜-梅花易数
梅花易数 灵活起卦(如数字、声音、外应等)和象数结合,准确率可达96.8%。其起卦方式摆脱传统龟壳、蓍草的繁琐,强调直觉与灵活性。 个人决策、事件预测等 尤其在短期、具体问题上表现突出。...
HOOPS Exchange 与HOOPS Communicator集成:打造工业3D可视化新标杆!
一、概述 在工业3D开发、BIM建筑、数字孪生和仿真分析等高端应用场景中,数据格式复杂、模型体量庞大、实时交互体验要求高,一直是困扰开发者的难题。Tech Soft 3D旗下的HOOPS Exchange和HOOPS Communicator,正是解决这类问题的黄金搭档。二者…...
SQL预编译——预编译真的能完美防御SQL注入吗
SQL注入原理 sql注入是指攻击者拼接恶意SQL语句到接受外部参数的动态SQL查询中,程序本身 未对插入的SQL语句进行过滤,导致SQL语句直接被服务端执行。 拼接的SQL查询例如,通过在id变量后插入or 11这样的条件,来绕过身份验证&#…...
通过 Zotero 的样式编辑器(Style Editor)自定义文献引用和参考文献列表的格式
好的!以下是一个更为详细的教程,帮助你通过 Zotero 的样式编辑器(Style Editor)自定义文献引用和参考文献列表的格式。 详细教程:使用 Zotero 样式编辑器自定义文献格式 1. 准备工作 在开始之前,请确保&a…...
PostgreSQL 通过 copy 命令导入几何数据 及 通过 CopyManager.copyIn() 导入几何数据
COPY命令介绍 copy是postgresql提供的一个专门用于快速导入导出数据的命令,通常用于从文件(TXT、CSV等)或标准输入输出中读取或写入数据。适合批量导入导出数据,速度快。 默认情况下,如果在处理过程中遇到错误,COPY将失败。 COPY只能用于表,不能用于视图!!! COPY…...
Next.js 技术详解:构建现代化 Web 应用的全栈框架
1. Next.js 概述 Next.js 是一个基于 React 的全栈框架,由 Vercel 团队开发和维护。它提供了一系列开箱即用的功能,使开发者能够快速构建高性能的 Web 应用。 核心优势 服务端渲染 (SSR)静态站点生成 (SSG)增量静态再生成 (ISR)文件系统路由API 路由图…...
【unity实战】Unity动画层级(Animation Layer)的Sync同步和Timing定时参数使用介绍,同步动画层制作角色的受伤状态
文章目录 前言方案一:复制粘贴原有层级的状态机1、实现2、问题 方法二:勾选Sync同步动画层1、简单实现同步2、同步blend tree的问题3、动画状态的播放时长4、下层状态覆盖了上层状态 专栏推荐完结 前言 如何制作角色的受伤状态? 玩家角色在…...
NFC 碰一碰发视频源码搭建,碰一碰发视频定制化开发技术
在移动互联时代,便捷的数据传输方式备受青睐。NFC(近场通信)技术以其操作简单、连接迅速的特性,为设备间的数据交互提供了高效解决方案。通过搭建 NFC 碰一碰发视频功能,用户只需将支持 NFC 的设备轻轻靠近,…...
获取视频封面
目录 实现方式注意事项代码实现 实现方式 通过 video 元素canvas 元素的方式实现 生成 video 和 canvas 元素当 video 元素资源加载完成时,将 video 元素绘制到 canvas 画布上,然后通过 toBlob 或则 toDataURL 获取到对应的封面图片资源 注意事项 vid…...
c#开发大冲锋游戏登录器
1 前言 本文主要分享登录器的简要开发过程,只适合小白选手,高手请自动避让。 此项目是复刻大冲锋计划中的子集。 (注:大冲锋是迅雷代理的一款次时代多职业第一人称FPS射击游戏,目前已经关服嗝屁。) 2 …...
堆的实现以及利用堆进行排序
堆 堆的实现1. 什么是堆?2. 最小堆的核心操作2.1 初始化堆2.2 销毁堆2.3 插入元素2.4 删除堆顶元素2.5 获取堆顶元素2.6 判断堆是否为空 3. 调整堆的算法3.1 向上调整3.2 向下调整 4. 测试代码 堆排序一.向下调整建堆二.向上调整建堆 时间复杂度分析向上建堆分析&am…...
FPGA-VGA
目录 前言 一、VGA是什么? 二、物理接口 三、VGA显示原理 四、VGA时序标准 五、VGA显示参数 六、模块设计 七、波形图设计 八、彩条波形数据 前言 VGA的FPGA驱动 一、VGA是什么? VGA(Video Graphics Array)是IBM于1987年推出的…...
仿腾讯会议项目开发——界面关闭功能实现
目录 1、include(./netapi/netapi.pri) 2、加快构建速度 3、INCLUDEPATH./netapi 4、添加控制类 5、用单例模式创建一个Ckernel的对象 6、创建一个回收的槽函数 7、添加界面文件 8、创建一个私有的界面对象 9、修改为使用单例模式的控制类创建界面 10、在Ckernel类中…...
微信小程序怎么分包步骤(包括怎么主包跳转到分包)
第一步 主包跳转到分包 第一步 第二步...
点云配准控制迭代停止的阈值
在点云配准(如ICP算法)中,setEuclideanFitnessEpsilon() 是一个设置收敛条件的函数,用于控制迭代停止的阈值。以下是关于该参数的详细说明: 函数作用 setEuclideanFitnessEpsilon() 设置的是 两次连续迭代之间均方误…...
高频面试题:Android MVP/MVVM/MVI这几种架构在实际生产中,各自的优缺点和适用场景是什么
安卓开发早期的架构模式相对简单,许多开发者直接在Activity或Fragment中堆砌业务逻辑和UI操作,这种方式虽然在小型项目中看似高效,但随着代码量的增加,很快就会导致逻辑混乱、难以测试和维护的问题。Activity和Fragment作为安卓框…...
国内主要半导体厂家
以下是国内主要半导体厂家按产品类别(模拟、数字、MCU、功率、传感器等)的分类总结,涵盖各领域代表企业及其核心产品方向: 一、模拟芯片(Analog IC) 圣邦微电子(SGMICRO)…...
DeepSeek深度观察:白宫“炒人“威胁的语义强度与市场应激量化分析
一、AI观察:政治博弈的语义强度分析 通过NLP情感分析模型对特朗普近期公开言论的语义解析显示,总统在社交媒体及记者会中多次使用"立即解雇""卷铺盖走人"等极端表述,其公开威胁解雇鲍威尔的推文互动量突破120万次&#…...
城市街拍暗色电影胶片风格Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色介绍 城市街拍暗色电影胶片风格 Lr 调色,是借助 Adobe Lightroom 软件,为城市街拍的人像或场景照片赋予独特视觉风格的后期处理方式。旨在模拟电影胶片质感,营造出充满故事感与艺术感的暗色氛围,让照片仿佛截取于某部充满张力…...
图像分类标注小工具
图像分类标注小工具 不说废话 上代码 import os import cv2 import shutil import csvclass ImageLabeler:def __init__(self, input_dir, output_dir, class_names, csv_pathlabel_log.csv, preview_size(800, 800)):self.input_dir input_dirself.output_dir output_dirse…...
leetcode 2364. 统计坏数对的数目 中等
给你一个下标从 0 开始的整数数组 nums 。如果 i < j 且 j - i ! nums[j] - nums[i] ,那么我们称 (i, j) 是一个 坏数对 。 请你返回 nums 中 坏数对 的总数目。 示例 1: 输入:nums [4,1,3,3] 输出:5 解释:数对…...
网络互连与互联网3
1.SMTP简单邮件传输协议,用于发送电子邮件,默认情况下是明文传输,没有加密机制。 SSL是一种安全协议,对电子邮件进行加密传输。 POP3主要用于接收电子邮件 IMAP用于接收电子邮件 2.采用存储-转发方式处理信号的设备是交换机 …...