梯度下降算法与十分类

一、梯度下降算法

(f_{w,b}(x{(i)})-y{(i)})^2:目标值和预测之间的平方差。

\sum\limits_{i=0}{m-1}(f_{w,b}(x{(i)})-y{(i)})2:每个目标值和预测之间平方差的和

:总的平均方差

1、定义

梯度下降(Gradient Descent)是一种用于最小化损失函数的优化算法。它通过不断更新模型参数,使得损失函数的值逐渐减小,最终达到最小值。这是机器学习和深度学习中最常用的优化方法之一,尤其是在训练神经网络时。

成本函数与损失函数

成本函数(Cost Function)和损失函数(Loss Function)在机器学习和深度学习中的概念密切相关,但有一些细微的区别:

1. 损失函数(Loss Function)

  • 定义损失函数用来衡量单个样本的预测值与真实值之间的误差,也就是说它计算单个数据点的预测误差。

  • 目标:衡量一个样本的预测值与实际值之间的差异,通常用于优化模型的参数。

  • 常见形式

    • 均方误差(MSE, Mean Squared Error):用于回归任务,计算预测值与真实值的平方差。

      L ( y , y ^ ) = ( y − y ^ ) 2 L(y, \hat{y}) = (y - \hat{y})^2 L(y,y^)=(yy^)2 L ( y i , y ^ i ) = ( y i − y ^ i ) 2 L(y_i,\hat{y}_i)=(yi−\hat{y}_i)^2 L(yi,y^i)=(yiy^i)2

    • 交叉熵损失(Cross-Entropy Loss):常用于分类任务,计算分类预测值与真实值的差异。

  • 作用:每次计算一个样本的损失后,可以通过梯度下降等优化算法来调整模型参数。

2. 成本函数(Cost Function)

  • 定义:==成本函数通常是指对整个数据集的损失进行平均或求和后得到的结果,它衡量了模型在整个训练数据集上的表现。==成本函数就是所有训练样本的预测值与实际值之间的误差平方和。

  • 目标:它用于指导模型的优化,使得整个数据集上的平均误差最小化,从而提高模型的整体性能。

  • 常见形式

    • 对于回归问题,成本函数通常是均方误差(MSE)的均值形式:

      J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( y i − y ^ i ) 2 J(w, b) = \frac{1}{2m} \sum_{i=0}^{m-1} (y_i - \hat{y}_i)^2 J(w,b)=2m1i=0m1(yiy^i)2

      (f_{w,b}(x{(i)})-y{(i)})^2:目标值和预测之间的平方差。

      \sum\limits_{i=0}{m-1}(f_{w,b}(x{(i)})-y{(i)})2:每个目标值和预测之间平方差的和

      其中,m 是数据集的样本数, y i y_i yi 是真实值, y ^ i \hat{y}_i y^i是预测值。目标是通过调整参数 w 和 b,使得成本函数 $J(w,b) $最小化,从而优化模型的性能。

      • 对于分类问题,成本函数可以是交叉熵损失的均值形式:

        J ( w , b ) = − 1 m ∑ i = 1 m y i log ⁡ ( y ^ i ) J(w, b) = - \frac{1}{m} \sum_{i=1}^{m} y_i \log(\hat{y}_i) J(w,b)=m1i=1myilog(y^i)

  • 作用:成本函数是对所有样本的损失进行的汇总,它是模型在整个训练集上的平均损失,用来衡量模型的整体好坏,优化目标是最小化成本函数。

3. 区别总结

区别损失函数成本函数
作用对象单个样本的误差整个训练集的平均误差
表达形式衡量一个样本的预测与真实值的差异衡量整个数据集的平均误差
常见公式均方误差、交叉熵损失等均方误差均值、交叉熵均值等
用途计算单个样本的误差,用于更新模型参数用于优化模型,使整个训练集的平均误差最小化

4. 具体联系

  • 损失函数是成本函数的组成部分,成本函数是对所有样本损失的综合统计。优化算法(如梯度下降)使用成本函数来更新模型的参数,以达到最优解。

2、梯度的概念

在多维空间中,梯度表示一个函数在每个维度上变化的方向和速率。对于损失函数 J(w),其梯度 ∇J(w) 是一个向量,指向损失函数增大的方向。因此,梯度下降的核心思想是沿着梯度的反方向移动,从而减小损失函数的值。

具体而言:

  • 如果我们沿着梯度的方向移动,损失函数的值会增加;
  • 如果沿着梯度的反方向移动,损失函数的值会减小。

\frac{\partial J(w,b)}{\partial w}=\frac{1}{m}\sum\limits_{i=0}{m-1}(f_{w,b}(x{(i)})-y{(i)})x{(i)}

\frac{\partial J(w,b)}{\partial b}=\frac{1}{m}\sum\limits_{i=0}{m-1}(f_{w,b}(x{(i)})-y^{(i)})

3. 梯度下降的更新公式

假设我们要最小化某个损失函数 J(w),并且 w 是模型的参数。梯度下降的更新公式为:

w : = w − α ⋅ ∂ J ( w ) ∂ w w := w - \alpha \cdot \frac{\partial J(w)}{\partial w} w:=wαwJ(w)

b : = b − α ⋅ ∂ J ( b ) ∂ b b := b - \alpha \cdot \frac{\partial J(b)}{\partial b} b:=bαbJ(b)

其中:

  • w 是参数;
  • α学习率,它决定了每次参数更新的步长;
  • ∂ J ( w ) ∂ w \frac{\partial J(w)}{\partial w} wJ(w)​ 是损失函数 J(w) 对参数 w梯度,即导数。

4、 梯度下降的工作流程

  • 步骤 1:初始化模型参数 wb(通常是随机的或为0)。
  • 步骤 2:计算损失函数 J(w),用于衡量模型在当前参数下的预测误差。
  • 步骤 3:计算损失函数对参数的偏导数,即梯度。这个梯度告诉我们损失函数在参数空间中增大的方向。
  • 步骤 4:根据梯度的反方向更新参数,更新步长由学习率 α 决定。
  • 步骤 5:重复步骤 2 到步骤 4,直到损失函数达到局部或全局最小值,或满足提前终止条件(如迭代次数、损失函数的变化幅度等)。

5、计算损失函数 j ( w , b ) j(w,b) j(w,b)代码实例

# 导入numpy、matplotlib模块
import numpy as np
from matplotlib import pyplot as plt
# 设定特征值
x_train = np.array([1, 2 , 3])
y_train = np.array([1, 2 , 3])
x = np.array([1, 2, 3])
# 设定权重
w=[]
for n in range(-1,6,1):w.append(n/2)
# 设定偏移
b=0
# 获取x(特征值)数量
m = len(x)
# 定义变量
cost_sum = 0
J_wb=[]
# 计算成本函数
for j in range(len(w)):for i in range(m):f_wb = w[j] * x[i] + bcost = (f_wb - y_train[i]) ** 2cost_sum = cost_sum + costj_wb = (1 / (2 * (m+1))) * cost_sumcost_sum = 0J_wb.append(j_wb)
# 绘制成本函数点
plt.scatter(w, J_wb)
# 绘制成本函数线
plt.plot(w, J_wb, color='red')
# 添加标题和标签
plt.title('Cost function')
plt.xlabel('w')
plt.ylabel('J_wb')
# 显示图形
plt.show()

代码:https://blog.csdn.net/cornki/article/details/132003714?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522A168A2B3-B7CA-448F-8E12-3C84771054D5%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=A168A2B3-B7CA-448F-8E12-3C84771054D5&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-132003714-null-null.142v100pc_search_result_base3&utm_term=%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D&spm=1018.2226.3001.4187
在这里插入图片描述

由上图可以清晰看到随着w的变化,总的平均方差也在改变,因此可以通过梯度下降的方法最小化成本来改变w和b就可以得到一条与数据完美拟合的线

6、梯度下降算法代码示例

# 导入numpy、matplotlib模块
import numpy as np
from matplotlib import pyplot as plt
# 设定特征值
x_train = np.array([1,2,3,4,5,6] )
y_train = np.array([15,22,31,44,57,62] )
# 设定权重、偏移、学习率、x的数量、方差列表、w的列表(后面作图)
w = 1
b = 0
a = 0.01
m = len(x_train)
J_wb_list = []
w_list = []
# 定义#J_wb函数(方差)
def J_wb(w,x,b,m):cost_sum = 0for i in range(m):f_wb = w * x[i] + bcost = (f_wb - y_train[i]) ** 2cost_sum = cost_sum + costJ_wb = 1 / (2 * m) * cost_sumreturn J_wb
# 定义w_new函数(优化w值)
def w_new(w,x,b,m,a):cost_w_sum = 0for i in range(m):f_wb = w * x[i] + bcost_w = (f_wb - y_train[i]) * x[i]# print(cost_w)cost_w_sum = cost_w_sum + cost_wJ_wb_w = w - (1 / m) * a * cost_w_sumreturn J_wb_w
# 定义b_new函数(优化b值)
def b_new(w,x,b,m,a):cost_b_sum = 0for i in range(m):f_wb = w * x[i] + bcost_b = f_wb - y_train[i]cost_b_sum = cost_b_sum + cost_bJ_wb_b = b - (1 / m) * a * cost_b_sumreturn J_wb_b
# 设置循环判定条件和结束条件
J_wb_one = J_wb(w,x_train,b,m)
w_one = w_new(w,x_train,b,m,a)
b_one = b_new(w,x_train,b,m,a)
w=w_one
b=b_one
# 如果方差在图形(学习率的图片)左侧
if J_wb_one > J_wb(w,x_train,b,m):while J_wb_one > J_wb(w,x_train,b,m):J_wb_one = J_wb(w, x_train, b, m)w_one = w_new(w,x_train,b,m,a)b_one = b_new(w,x_train,b,m,a)w=w_oneb=b_oneJ_wb_list.append(J_wb(w, x_train, b, m))w_list.append(w)if J_wb(w,x_train,b,m) == J_wb_one:break
# 如果方差在图形(学习率的图片)右侧
else:while J_wb_one < J_wb(w,x_train,b,m):J_wb_one = J_wb(w, x_train, b, m)w_one = w_new(w,x_train,b,m,a)b_one = b_new(w,x_train,b,m,a)w=w_oneb=b_oneJ_wb_list.append(J_wb(w, x_train, b, m))w_list.append(w)if J_wb(w,x_train,b,m) == J_wb_one:break
print(w,b,J_wb(w,x_train,b,m))
plt.subplot(211)
# 绘制成本函数点
plt.scatter(w_list, J_wb_list)
# 绘制成本函数线
plt.plot(w_list, J_wb_list, color='red')
# 添加标题和标签
plt.title('Change map')
plt.xlabel('w')
plt.ylabel('J_wb')
# 显示图形
plt.subplot(212)
plt.plot(x_train, y_train, 'o', color='blue')
plt.show()

解读:

这个代码实现了一个简单的线性回归模型,通过梯度下降法来优化模型的权重参数 w偏置 b,以最小化模型的损失函数(也就是方差)。代码的主要目的是通过不断优化 wb,使得模型的预测值与实际值的差距(即损失)最小,并最终绘制出损失函数 J_wbw 的变化图。

1. 导入必要模块

import numpy as np
from matplotlib import pyplot as plt
  • numpy 用于处理数组和数值计算。
  • matplotlib.pyplot 用于绘制图形。

2. 设置训练数据

x_train = np.array([1,2,3,4,5,6])
y_train = np.array([15,22,31,44,57,62])
  • x_trainy_train 是你手动设置的训练数据(特征和标签)。这里的 x_train 是输入特征,y_train 是输出目标值。

3. 初始化模型参数

w = 1
b = 0
a = 0.01
m = len(x_train)
J_wb_list = []
w_list = []
  • w:模型的权重,初始值为 1。
  • b:偏置,初始值为 0。
  • a:学习率(梯度下降的步长),设定为 0.01。
  • m:数据集的大小,x_train 的长度为6。
  • J_wb_listw_list:用于记录每次迭代中的损失和权重值,方便后面绘制曲线。

4. 定义损失函数 J_wb

def J_wb(w,x,b,m):cost_sum = 0for i in range(m):f_wb = w * x[i] + bcost = (f_wb - y_train[i]) ** 2cost_sum = cost_sum + costJ_wb = 1 / (2 * m) * cost_sumreturn J_wb
  • 损失函数J_wb 是线性回归中的平方差损失函数,用来计算模型的预测值与真实值之间的差异。
  • f_wb = w * x[i] + b 是模型的预测值公式,其中 w 是权重,b 是偏置。
  • 通过循环遍历所有数据点,计算总的平方误差,然后平均化并返回损失值。

5. 定义更新 w 的函数

def w_new(w,x,b,m,a):cost_w_sum = 0for i in range(m):f_wb = w * x[i] + bcost_w = (f_wb - y_train[i]) * x[i]cost_w_sum = cost_w_sum + cost_wJ_wb_w = w - (1 / m) * a * cost_w_sumreturn J_wb_w
  • 通过计算损失函数对 w 的偏导数,来更新权重 w,即通过梯度下降法调整 w
  • cost_w_sum 是对所有样本的误差与 x[i] 的乘积进行累加。
  • w_new 使用了梯度下降公式:w_new = w - learning_rate * gradient_w

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


6. 定义更新 b 的函数

def b_new(w,x,b,m,a):cost_b_sum = 0for i in range(m):f_wb = w * x[i] + bcost_b = f_wb - y_train[i]cost_b_sum = cost_b_sum + cost_bJ_wb_b = b - (1 / m) * a * cost_b_sumreturn J_wb_b
  • 同样是通过计算损失函数对 b 的偏导数来更新 b,即通过梯度下降法调整 b

7. 进行迭代优化

J_wb_one = J_wb(w,x_train,b,m)
w_one = w_new(w,x_train,b,m,a)
b_one = b_new(w,x_train,b,m,a)
w=w_one
b=b_one
  • 初始计算当前的损失函数值 J_wb_one,并用新的权重和偏置更新模型参数。

8. 梯度下降循环

if J_wb_one > J_wb(w,x_train,b,m):while J_wb_one > J_wb(w,x_train,b,m):# 更新权重、偏置,并记录损失值
else:while J_wb_one < J_wb(w,x_train,b,m):# 更新权重、偏置,并记录损失值
  • 代码中对损失函数进行了判断,分别根据损失函数是否在左侧或右侧进行梯度下降。
  • 不断优化权重 w 和偏置 b,直到损失函数不再变化(达到最优解)。

9. 打印结果

print(w,b,J_wb(w,x_train,b,m))
  • 打印最终优化后的 wb 值,以及对应的损失函数值。

10. 绘制损失函数变化曲线

plt.scatter(w_list, J_wb_list)
plt.plot(w_list, J_wb_list, color='red')
plt.title('Change map')
plt.xlabel('w')
plt.ylabel('J_wb')
plt.show()
  • w_listJ_wb_list 分别记录了每次迭代中的权重和损失函数值,通过 matplotlib 将这些值绘制成曲线。
  • 通过该图,可以观察到模型的损失值如何随着权重的变化而变化。

11. 总结

  • 该程序实现了一个简单的线性回归模型,使用了梯度下降法来优化权重 w 和偏置 b,并通过绘制图形观察损失函数的变化。
  • 损失函数用于衡量模型预测与实际值的差距,梯度下降通过最小化损失函数来找到最优的参数。

二、手写数字识别任务(十分类)

手写数字识别任务是一项经典的机器学习和计算机视觉任务,主要目标是让模型能够识别手写的数字,并将其分类为0到9中的某一个数字。它是多分类问题的一个具体应用,最常见的数据集是MNIST数据集。在手写数字识别中,模型会从一张图片中提取特征,然后根据这些特征来预测图片上显示的数字。

1. 手写数字识别任务的背景与应用

手写数字识别最初的应用场景是自动处理银行支票、邮件分拣、自动化表单处理等。现在,手写数字识别是机器学习、深度学习中的入门任务之一,用来测试和验证模型的分类性能。

常见应用包括:

  • 光学字符识别(OCR):将手写或印刷文本转换为计算机可读的文本。
  • 自动化表单处理:如银行支票的金额识别,文档扫描自动识别文字等。

2. MNIST数据集

MNIST(Modified National Institute of Standards and Technology)数据集是手写数字识别任务中最常用的数据集。它包含从0到9的手写数字图像。数据集由两部分组成:

  • 训练集:包含60,000个手写数字图像及其对应的标签(0到9)。
  • 测试集:包含10,000个手写数字图像及其对应的标签,用来评估模型性能。

每张图片都是28x28像素的灰度图像,像素值在0到255之间,其中:

  • 值为0表示背景(黑色),
  • 值为255表示前景(白色),
  • 中间值表示不同的灰度级别。

每张图片的标签是一个数字,代表图片上所显示的手写数字。

归一化与像素值

像素值 是图像中每个像素(图片的最小单位)的数值表示。不同的像素值决定了该像素的颜色或亮度。对于灰度图像(如MNIST数据集中的手写数字图片),每个像素值代表该像素的亮度。通常灰度图像的像素值范围是 0到255,其中:

  • 0 表示黑色,
  • 255 表示白色,
  • 0到255之间的数值表示不同的灰度级别。

RGB 则是针对彩色图像的一种颜色表示方式。RGB代表 红色(Red)、绿色(Green)、蓝色(Blue) 三个颜色通道,通过组合这三个颜色通道的强度值,来表示图像中每个像素的颜色。

1. 像素值

在灰度图像中,像素值是0到255之间的整数,代表该像素的亮度:

  • 0:纯黑色,
  • 255:纯白色,
  • 中间的数值表示从黑色到白色的不同灰度。

在彩色图像中,像素的表示更加复杂。每个像素由三个值组成,分别是红色、绿色和蓝色(RGB),每个值的范围也在0到255之间。

  • 0 表示该颜色通道的强度为最低(即没有该颜色),
  • 255 表示该颜色通道的强度为最高。

2. RGB 与 像素值的关系

RGB图像的每个像素包含三个颜色通道,每个通道的像素值范围也是0到255。通过组合红、绿、蓝三个颜色通道的值,可以表示所有颜色。例如:

  • (255, 0, 0) 代表红色:红色通道的值为255,绿色和蓝色通道的值为0。
  • (0, 255, 0) 代表绿色:绿色通道的值为255,红色和蓝色通道的值为0。
  • (0, 0, 255) 代表蓝色:蓝色通道的值为255,红色和绿色通道的值为0。
  • (255, 255, 255) 代表白色:所有通道的值都为255。
  • (0, 0, 0) 代表黑色:所有通道的值都为0。

3. 为什么要进行归一化

当处理图像时,尤其是在训练神经网络模型时,通常需要对输入的像素值进行归一化处理,即将像素值从0到255的范围缩放到0到1之间。这样做有以下好处:

  1. 减少数值范围差异:原始的像素值范围较大,输入到神经网络中时可能会导致梯度消失或爆炸问题。通过将像素值缩放到0到1之间,可以减少模型的计算负担,提升收敛速度。

  2. 更稳定的训练:归一化后的数据使得模型在训练时参数更新更加平稳,不容易因为大范围的输入数据导致优化器工作不正常。

4. 归一化的示例

归一化的基本公式是:
$ x_{\text{norm}} = \frac{x}{255} $

对于灰度图像,假设一个像素值是 128,归一化后的值就是:
$x_{\text{norm}} = \frac{128}{255} \approx 0.502 $

对于彩色图像,每个像素的三个通道的值都会分别进行归一化。例如,像素值 (255, 128, 64) 的归一化结果是:
[ (1.0, 0.502, 0.251) ]

总结

  • 像素值 是图像中每个像素的颜色或亮度的数值表示,灰度图像是0到255的灰度级,而彩色图像则使用RGB三个通道的值来表示颜色。
  • RGB 图像通过红、绿、蓝三个颜色通道的组合来定义每个像素的颜色。
  • 归一化 是将像素值从0到255缩放到0到1之间,以减少数值范围的差异,帮助神经网络模型更好地进行训练。

如果你正在处理图像数据,归一化是一个非常重要的步骤,尤其是在使用深度学习模型时,比如在手写数字识别任务中对MNIST数据集的处理。

3. 手写数字识别任务的工作流程

通常,手写数字识别任务可以通过以下几个步骤来完成:

3.1. 数据预处理

在任务开始时,我们需要对原始数据进行一些预处理:

  • 归一化:将像素值从0到255的范围缩放到0到1,以减少输入特征的数值范围。
  • 图像变换:有时候还会进行一些数据增强操作,比如随机旋转、缩放等,增加数据的多样性,提高模型的泛化能力。

3.2. 特征提取

特征提取的目的是将手写数字的图片转换为一种可以被模型理解的形式。在深度学习之前,常常会用手工设计的特征,如边缘、纹理等。如今,卷积神经网络(CNN)可以自动学习图片的特征,因此手写数字识别任务中广泛使用CNN来提取特征。

3.3. 模型训练

为了实现手写数字识别,通常使用以下几种常见的模型:

  • 卷积神经网络(CNN):这是解决手写数字识别任务的主流模型。CNN能够有效捕捉图像的空间特征,通过卷积层、池化层提取特征,再通过全连接层进行分类。
  • 支持向量机(SVM):在深度学习流行之前,SVM也是解决手写数字识别任务的常用模型,特别是线性SVM或多项式核SVM。
  • K最近邻(KNN):KNN是一种简单的非参数模型,通过计算输入图像与训练集中所有图像的距离,选取K个最近的样本进行投票决策。
  • 全连接神经网络(MLP):一种经典的神经网络结构,但由于其不能有效处理图像的空间信息,在手写数字识别上表现不如CNN。

3.4. 损失函数与优化

在训练过程中,模型会通过损失函数来计算预测值与真实值之间的误差。常用的损失函数是交叉熵损失(Cross-Entropy Loss),它适合多分类任务。然后通过反向传播(Backpropagation)来更新模型参数,优化方法通常使用梯度下降(如Adam、SGD等)。

3.5. 模型评估

模型训练完成后,会使用测试集对模型进行评估。常见的评估指标包括:

  • 准确率:模型预测正确的样本数与总样本数的比值。
  • 混淆矩阵:显示模型在不同类别上的预测表现,用来评估模型在每个数字上的分类效果。

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

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

相关文章

vue项目中使用drive.js元素未定位成功

在使用drive.js时&#xff0c;button我设了一个id 但是在使用时却定位失败 只要在mounted设置setTimeout即可

开发一个ftp上传客户端

文章目录 需求分析Tkinter基本用法多窗口切换FTP上传 程序打包源码 需求 项目中有个小功能模块 &#xff0c;需要win下实现ftp上传功能&#xff0c;编写一个DEMO测试 要求 界面简单选择本地文件 上传ftp服务器显示进度条显示状态上传完成后显示URL分享地址 分析 Tkinter Tkint…

【AI绘画SD教程】Lineart线稿上色和IP-Adapter 人像写真插件实操教学,轻松助你生成多种风格的AI人像大片!SD零基础入门到精通教程

大家好&#xff0c;我是画画的小强 今天给大家分享一下如何用AI绘画工具StableDiffusion当中的 LineArt线稿处理 和 IP-Adapter 实操教学。 本期教程开始之前&#xff0c;请先确保你的电脑已经安装好StableDiffusion这款AI绘图工具&#xff0c;如你还没有安装使用&#xff0c…

电桥的作用是什么?

一、电桥的基本概念和原理 电桥是一种测量电阻、电容、电感等电学量的仪器&#xff0c;其原理基于电路中的克希荷夫定律以及欧姆定律。电桥由四个电阻分支组成&#xff0c;在精确测量电阻时&#xff0c;需要把待测电阻与一个已知电阻进行比较&#xff0c;通过调节电桥中的一个…

将流畅度贯彻到底的ColorOS,究竟有何“流畅法宝”?

在智能手机这个无比激烈的竞技场中&#xff0c;系统的流畅度和稳定性往往是衡量用户体验的金标准。 ColorOS作为OPPO手机的操作系统&#xff0c;自2013年诞生以来&#xff0c;便以其卓越的系统流畅度赢得了众多用户的青睐。同时其在2020年创办至今的鲁大师牛角尖盛典中&#x…

学习threejs,光晕效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;光晕效果实现1. ☘…

蓝牙模块(BT04/HC05)

目录 一、介绍 二、模块原理 1.原理图与外形尺寸 2.引脚描述 3.蓝牙模块基础AT指令介绍 三、程序设计 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BT04A是一款蓝牙低功耗&#xff08;Bluetooth Low Energy, BLE&#xff09;模块&…

(RAG)技术结合了大模型(LLM)与内部数据,从而实现更智能且相关性更高的 AI 应用

利用先进的生成式 AI 技术&#xff08;如 RAG&#xff09;&#xff0c;释放数据的潜力&#xff0c;推动创新并获取战略优势 主要功能 使用向量数据库优化数据检索和生成 通过 AI 代理提升决策效率并自动化工作流程 克服实施真实 RAG 系统中的常见挑战 购买印刷版或 Kindle …

股指期货和股指期权有什么区别?

在金融衍生品的世界里&#xff0c;股权类衍生品无疑是其中的佼佼者&#xff0c;而股指期货和股指期权更是其中的佼佼者。尽管它们之间有着千丝万缕的联系&#xff0c;但它们之间的区别同样不容忽视。本文衍生股指君将详细解析股指期货和股指期权的核心区别。 一、交易的东西不…

数据库软题7-数据库设计

一、概念结构设计 题1-ER图的属性分类 题2-局部ER图的冲突分类 1.命名冲突 命名冲突有同名异义&#xff0c;异名同义2.结构冲突 结构冲突分为&#xff1a;统一实体不同属性&#xff0c;同一对象在不同关系里可能为属性或者实体 教师其实就是职工&#xff0c;他们有不同的属性…

5.将扩散模型应用于具有特殊结构的数据

虽然扩散模型在图像和音频等数据应用领域中取得了巨大的成功&#xff0c;但他们不一定能无缝地转移到其他模态上。在许多重要的领域&#xff0c;数据有特殊的结构。为了让扩散模型有效运作&#xff0c;必须考虑并处理这些特殊结构。比如&#xff0c;经典扩散模型所依赖的分数的…

「JVS更新日志」低代码、智能BI、逻辑引擎10.9功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

SDUT数据结构与算法第二次机测

目录 7-1 括号匹配 7-2 后缀式求值 7-3 表达式转换 7-4 【模板】KMP字符串匹配 比较详细注释和图解请看KMP——字符串匹配-CSDN博客&#xff0c;&#xff08;点击链接可跳转&#xff09;一看就会 7-5 约瑟夫环&#xff08;押题&#xff0c;重要&#xff09; 7-6 单调栈&a…

迪士尼数据泄露事件:全面审视数据安全策略与未来防护方向

迪士尼数据泄露事件概述 一、 事件背景以及影响 在全球数字化转型加速的浪潮中&#xff0c;数据安全已成为企业运营不可忽视的基石。 华特迪士尼公司&#xff0c;作为全球知名的娱乐传媒巨头&#xff0c;其数据泄露事件无疑为业界敲响了警钟。此次事件不仅揭示了数据保护的严…

Pymysql cur.fetchall() 返回 None

大家在pymysql 的 cur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None&#xff0c;可能是由于以下多种问题导致的。 1、问题背景 在使用 Pymysql 库连接到 MySQL 数据库时&#xff0c;遇到这样…

YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块

目录 一、GhostNetV2核心代码 二、修改common.py 三、修改yolo.py 三、建立yaml文件 四、训练 一、GhostNetV2核心代码 在models文件夹下新建modules文件夹&#xff0c;在modules文件夹下新建一个py文件。这里为GhostV2.py。复制以下代码到文件里面。 # TODO: ghostnetv…

好用的免费录屏软件推荐,让软件操作教程制作不再困难

录屏软件就像是我们做教程或者玩游戏时的“小助手”&#xff0c;它能帮我们把屏幕上的东西都记录下来&#xff0c;让视频看起来更高大上。今天我就给你推荐三款免费的好货&#xff0c;用它们做教程&#xff0c;保证让你轻松又开心。 1. 福昕录屏大师 虫洞 https://www.foxits…

【读书笔记·VLSI电路设计方法解密】问题4:今天的设计环境中使用的主要工艺技术是什么

主流的工艺技术是互补金属氧化物半导体&#xff08;CMOS&#xff09;技术。其他技术还包括双极性、双极CMOS&#xff08;biCMOS&#xff09;、绝缘体上硅&#xff08;SOI&#xff09;和砷化镓&#xff08;GaAs&#xff09;。 在CMOS技术中&#xff0c;"互补对称"指的…

SD入门教程一:Stable Diffusion 基础(技术篇)

前言 在开篇的时候就大致讲了SD和VAE&#xff0c;那么今天我们具象化地再来讲讲Stable Diffusion&#xff08;稳定扩散&#xff09;。 严格说来它是一个由几个组件&#xff08;模型&#xff09;构成的系统&#xff0c;而非单独的一个模型。我以最常见的文生图为例&#xff0c;…

大型保险公司进行营销活动时,如何与外部客户实现文件安全外发?

大型保险公司为了吸引新客户、维护老客户、提升品牌形象以及推广特定的保险产品&#xff0c;会定期向外部客户或潜在客户发送营销文件。在客户签单后&#xff0c;保险公司会将客户相关的签单个人文件发送给客户。因此&#xff0c;大型保险公司内部存在较为频繁且重要的文件安全…