机器学习(1)——线性回归、线性分类与梯度下降
文章目录
- 线性回归
- 线性分类
- 线性可分数据
- 线性不可分数据
- 逻辑回归
- 支持向量机
- 梯度下降
- 批量梯度下降
- 随机梯度下降
- 批量随机梯度下降
线性回归
概述:
在一元线性回归中,我们假设目标变量y与特征变量x存在线性关系,模型表达式为:
y = W 0 + W 1 x 1 + W 2 x 2 + ⋯ + W n x n + ϵ y=W_0+W_1x_1+W_2x_2+\cdots+W_nx_n+\epsilon y=W0+W1x1+W2x2+⋯+Wnxn+ϵ
其中:
- W 0 W_0 W0是截距(bias)
- W 1 , W 2 , . . . , W n W_1,W_2,...,W_n W1,W2,...,Wn是回归系数(权重)
- ε是噪声或误差项
对于多个样本的情况,可以将特征表示为矩阵X,目标值为向量y。在这种情况下,线性回归模型可以写作:
y ^ = X W \hat{y}=XW y^=XW
其中:
- X是输入特征矩阵(包含所有样本)
- W是权重向量
- y ^ \hat{y} y^是模型的预测值向量
损失函数(MSE):
为了让模型拟合数据,通常我们会使用均方误差(MSE)作为损失函数,来度量模型的预测值 y ^ \hat{y} y^与实际值y之间的差异:
J ( W ) = 1 2 m ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 m ( X W − y ) T ( X W − y ) J(W)=\frac1{2m}\sum_{i=1}^m(\hat{y}_i-y_i)^2=\frac1{2m}(XW-y)^T(XW-y) J(W)=2m1i=1∑m(y^i−yi)2=2m1(XW−y)T(XW−y)
其中m是样本数
线性回归的闭式解: 指通过直接求解方程组,得到回归模型的参数(即权重向量)的解析解,而不需要通过迭代的优化算法(如梯度下降)来找到最优解
闭式解的推导:
最小化损失函数 J ( W ) J(W) J(W)以找到最优权重W。通过对 W W W求导并让导数为0,可以得到线性回归的解析解。首先对损失函数求导:
∂ J ( W ) ∂ W = 1 m X T ( X W − y ) \frac{\partial J(W)}{\partial W}=\frac1mX^T(XW-y) ∂W∂J(W)=m1XT(XW−y)
将导数设置为0,求解 W W W:
X T ( X W − y ) = 0 X T X W = X T y \begin{gathered} X^T(XW-y)=0 \\ X^TXW=X^Ty \end{gathered} XT(XW−y)=0XTXW=XTy
可以通过矩阵求逆的方式得到 W W W:
W = ( X T X ) − 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)−1XTy
这就是线性回归的闭式解公式
闭式解的核心思想:
- 直接求解:通过解析方法一次性求出最优权重 W W W,不需要像梯度下降一样逐步优化
- 线性代数运行:通过矩阵转置、乘法和求逆等线性代数运算实现
- 适用场景:对于小规模数据集、闭式解可以快速得到结果。然而当数据量非常大时,计算 X T X X^TX XTX的逆矩阵可能非常耗时,因此在大数据集上通常采用梯度下降等数据优化方法
优点与缺点:
- 优点:直接得到最优解,计算速度快(适合小数据集
- 缺点:对于高维度数据集,矩阵求逆的计算复杂度较高 O ( n 3 ) O(n^3) O(n3),在数据量过大时不适用
线性分类
概述: 线性分类器是基于线性决策边界进行分类的模型,形式上它会学到一个权重向量W和一个偏置b,其决策规则可以表示为:
f ( x ) = w T x + b f(\mathbf{x})=\mathbf{w}^T\mathbf{x}+b f(x)=wTx+b
在这种情况下,分类是根据f(X)的符号来进行的:
- 如果f(x) > 0,则将数据点分类为正类
- 否则为负类
这种方式只输出一个硬分类的结果,没有给出分类的概率
线性可分数据
概述: 指的是数据集中的不同类别可以通过一条直线(在二维空间中)或一个超平面(在高维空间中)完全分开,没有任何重叠或错误分类
特点:
- 可以找到一个线性决策边界(如一条直线或一个超平面),使得数据集中所有点都可以准确分到正确的类别
- 这种类比的数据适合使用线性分类器,如感知器、线性支持向量机(SVM)等
二维平面中的例子:
类别 A: (蓝色点) 类别 B: (红色点)蓝 蓝 蓝 蓝(直线)
红 红 红 红
在这种情况下,直线可以完全分开这两类点,没有任何交错
线性不可分数据
概述: 是指数据集中不同类别的点不能通过一条直线(或超平面)来完全分开,一些数据会落在错误的边界一侧,导致无法完美分类
特点:
- 没有单一的线性边界可以准确分隔数据类别
- 线性分类器在这种情况下表现不佳,因为它们依赖于线性分界线
- 处理线性不可分数据的常用方法包括使用非线性模型(如核化支持向量机、决策树)或者对特征进行转换,,使数据在更高维空间中线性可分
二维平面中的例子:
类别 A: (蓝色点) 类别 B: (红色点)蓝 红 蓝 红
红 蓝 红 蓝
在这种情况下,无论如何放置一条直线,总会有一部分点被错误分类。
解决线性不可分问题:
- 引入非线性分类器:如使用核支持向量机(SVM),将数据映射到高维空间,使其在高维空间中线性可分。
- 增加特征:通过添加多项式特征或交互特征,可以在输入空间中创建一个更复杂的模型。
- 使用核技巧 (Kernel Trick):这是 SVM 的一个重要特性,通过核函数将低维数据映射到高维空间,使原本线性不可分的数据在高维空间中变得线性可分。
逻辑回归
概述: 是一种用于二分类问题的线性模型,尽管名字里有回归,它实际上用于分类任务。可以说是线性分类的一种特例,但它采用了概率的方式进行分类决策。
核心思想:
逻辑回归的目标是通过学习到的模型预测某个输入属于某个类别的概率。其基本形式是将线性回归的输出通过Sigmoid函数转换为一个介于0到1之间的概率值
-
线性部分:给定一个输入向量X和模型参数W,线性部分的输出为:
z = W T X + b z=W^TX+b z=WTX+b
这个W是权重向量,b是偏置 -
Sigmoid函数:将线性输出z转换为概率值p:
p = 1 1 + e − z p=\frac1{1+e^{-z}} p=1+e−z1
这个p表示预测结果为正类的概率 -
损失函数:逻辑回归的损失函数通常是交叉熵损失,用于评估模型预测的概率分布和实际标签之间的差异:
J ( W ) = − 1 m ∑ i = 1 m [ y i log ( y ^ i ) + ( 1 − y i ) log ( 1 − y ^ i ) ] J(W)=-\frac1m\sum_{i=1}^m\left[y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)\right] J(W)=−m1i=1∑m[yilog(y^i)+(1−yi)log(1−y^i)]
其中, y ^ i \hat{y}_i y^i是第i个样本的预测概率, y i y_i yi是实际标签,m是样本数 -
Logistic回归的梯度公式:
∇ L ( W ) = X T ( sigmoid ( X W ) − y ) \nabla L(W)=X^T(\text{sigmoid}(XW)-y) ∇L(W)=XT(sigmoid(XW)−y)
训练逻辑回归的过程: 通过最小化损失函数的值,调整权重W和偏置b。最常用的优化算法是梯度下降,其中包括不同的变体。
支持向量机
概述: Support Vector Machine是一种更为强大的分类算法,特别适合于线性不可分的数据集。SVM的目标是在特征空间中找到一个最优的决策边界(超平面),并且它有一个非常独特的特点:最大化分类边界的间隔
原理:
-
超平面:SVM在特征空间中寻找一个超平面,将数据点分类。对于线性可分数据,超平面的方程是:
w T x + b = 0 w^Tx+b=0 wTx+b=0 -
最大化间隔:SVM不仅寻找一个可以分开数据的超平面,还要找到那个离两类数据点最远的超平面,确保间隔最大化。这被称为最大化分类边界的间隔(Margin)。这样可以增强模型的鲁棒性,减少过拟合
-
支持向量:距离决策边界最近的那些数据点被称为支持向量。这些点对决策边界有最重要的影响
损失函数:
-
合页损失函数(Hinge Loss):是用于分类函数的损失函数,用来惩罚错误分类或分类边界附件的样本
L ( y i , f ( x i ) ) = max ( 0 , 1 − y i f ( x i ) ) L(y_i,f(x_i))=\max(0,1-y_if(x_i)) L(yi,f(xi))=max(0,1−yif(xi))
其中:- y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} yi∈{−1,1} 是样本i的真实标签(SVM通常处理二分类问题)
- f ( x i ) = w ⊤ x i + b f(x_i)=\mathbf{w}^\top x_i+b f(xi)=w⊤xi+b 是模型对样本 x i x_i xi的预测结果,表示超平面w和 x i x_i xi的内积再加上偏置b
- 1 − y i f ( x i ) 1-y_if(x_i) 1−yif(xi) 是衡量样本离决策边界的距离
- 如果样本被正确分类且距离边界大于 1,损失为 0;否则,损失随着样本距离边界的接近或错误分类而增加。
-
正则化项:SVM 模型的目标是找到能够最大化分类间距(margin)的超平面。因此,为了平衡分类误差和间距的最大化,损失函数通常还包括一个正则化项,用来控制模型的复杂度(即防止过拟合)。常见的正则化项是L2 正则化,其形式为:
R ( w ) = 1 2 ∥ w ∥ 2 R(\mathbf{w})=\frac12\|\mathbf{w}\|^2 R(w)=21∥w∥2 -
总损失函数:
J ( w , b ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 m max ( 0 , 1 − y i ( w ⊤ x i + b ) ) J(\mathbf{w},b)=\frac12\|\mathbf{w}\|^2+C\sum_{i=1}^m\max(0,1-y_i(\mathbf{w}^\top x_i+b)) J(w,b)=21∥w∥2+Ci=1∑mmax(0,1−yi(w⊤xi+b))- 其中:
- C 是一个超参数,用于控制正则化项和合页损失之间的权衡。较大的 C 会减少分类错误,但可能导致过拟合;较小的 C 会增加容错性,防止过拟合。
- m 是训练样本的数量。
- 其中:
梯度公式:
-
对权重向量W的梯度:
∂ J ( w , b ) ∂ w = w − C ∑ i ∈ M y i x i \frac{\partial J(\mathbf{w},b)}{\partial\mathbf{w}}=\mathbf{w}-C\sum_{i\in\mathcal{M}}y_ix_i ∂w∂J(w,b)=w−Ci∈M∑yixi -
对偏置b的梯度:
∂ J ( w , b ) ∂ b = − C ∑ i ∈ M y i \frac{\partial J(\mathbf{w},b)}{\partial b}=-C\sum_{i\in\mathcal M}y_i ∂b∂J(w,b)=−Ci∈M∑yi
核技巧(kernel Trick): 当数据无法通过线性超平面分割时,SVM使用核技巧将数据映射到高维空间。常见的核函数包括:
- 多项式核(Polynomial Kernel):将原始数据通过多项式映射到高维空间
- 高斯核/径向基核(RBF Kernel):将数据点投影到无穷维空间,使得非线性数据在高维空间中变得线性可分
梯度下降
是一种用于优化线性回归和线性分类模型的迭代方法,通过计算损失函数的梯度,并沿着梯度的反方向迭代更新参数 W W W,逐步逼近最优解。梯度下降有三种主要变体:
- 批量梯度下降(Batch Gradient Descent, BGD)
- 随机梯度下降(Stochastic Gradient Descent, SGD)
- 随机批量梯度下降(Mini-Batch Gradient Descent, MBGD)
样本数的对梯度公式的影响:
- 如果不除以样本数,计算得到的梯度是累计的梯度,也就是每个样本的误差对权重的累积影响
- 如果除以样本数,计算得到的是平均梯度,每次更新会使用平均误差对权重进行更新
参数更新公式:
W = W − η ∇ L ( W ) W=W-\eta\nabla L(W) W=W−η∇L(W)
其中:
- W W W是参数向量
- η \eta η是学习率,控制更新的步长
- 损失函数 J ( W ) J(W) J(W),在线性回归中有介绍,不同的模型可以选取不同的损失函数
- ∇ L ( W ) \nabla L(W) ∇L(W)是损失函数 J ( W ) J(W) J(W)对参数W的梯度(也就是求导,一般来说,如果损失函数是每个样本损失的平均值,也就是除以了样本数m,那损失的函数的梯度就不再需要除以样本数m了
批量梯度下降
概述: 在每次迭代中,使用整个训练集来计算梯度
过程:
- 首先,初始化模型参数
- 定义损失函数 J ( W ) J(W) J(W)
- 求解损失函数的导数,也就是损失函数的梯度函数 L ( W ) L(W) L(W)
- 根据上面给的参数更新公式更新W
- 重复迭代
优点:
- 更新稳定,避免了由样本噪声引起的波动
- 收敛到全局最优解,梯度方向更精确
缺点:
- 计算成本高
- 不适合大规模数据集
随机梯度下降
概述: 在每次迭代中,只使用一个样本计算梯度
SGD优缺点:
- 优点:
- 效率高:对于大规模数据集,SGD不需要每次都遍历整个数据集,它每次只对一个样本进行更新,使得计算更快
- 内存友好:由于它只需要处理一个样本,内存消耗相对较低,适合处理大数据
- 在线学习:SGD可以随着新数据的到来在线更新模型, 而不需要每次都从头开始训练
- 缺点:
- 噪声较大:由于每次更新使用的是单个样本,更新方向可能不是全局最优,因此SGD的收敛路径往往比较噪声且不稳定
- 需要调整学习率:学习率 η \eta η的选择至关重要。如果学习率过大,参数更新可能会错过最优点;如果学习率过小,收敛速度将非常慢
学习率衰减策略:
为了解决噪声问题,常见的做法是在训练过程中逐渐减低学习率,这种方法可以在训练初期进行较大步长的更新,使得模型快速接近最优解,而在后期逐渐减小步长,使得模型在最优解附件收敛
学习率衰减公式的常见形式是:
KaTeX parse error: Expected 'EOF', got '_' at position 40: …1 + \text{decay_̲rate} \cdot t}
其中:
- η 0 \eta_0 η0是初始学习率
- t t t是当前的迭代次数
- KaTeX parse error: Expected 'EOF', got '_' at position 12: \text{decay_̲rate}是学习率的衰减系数
伪代码:
初始化 W
for epoch in range(num_epochs):for i in range(m): # m是样本数量随机选取一个样本 (x_i, y_i)计算该样本的梯度: grad = x_i * (x_i W - y_i)取负梯度方向更新参数: W = W - η * grad记录训练集或验证集的损失
批量随机梯度下降
概述: 每次使用一小批随机样本计算梯度
过程:
-
初始化权重W和b
-
选择批量大小B(比如32,64等
-
每次迭代时,从训练集中随机抽取一批样本,计算该批样本上的损失函数梯度,然后更新权重:
W = W − η ∇ L ( W ) W=W-\eta\nabla L(W) W=W−η∇L(W)
其中 η \eta η是学习率, η ∇ L ( W ) \eta\nabla L(W) η∇L(W)是对权重的梯度
优点:
- 在每次更新时引入随机性,避免陷入局部最优解
- 更新效率较高,能在大规模数据集上加速训练
- 在批量计算中还可以利用并行化处理,进一步提高效率
相关文章:
机器学习(1)——线性回归、线性分类与梯度下降
文章目录 线性回归线性分类线性可分数据线性不可分数据逻辑回归支持向量机 梯度下降批量梯度下降随机梯度下降批量随机梯度下降 线性回归 概述: 在一元线性回归中,我们假设目标变量y与特征变量x存在线性关系,模型表达式为: y …...
完整的端到端的中文聊天机器人
这段代码是一个完整的端到端的中文聊天机器人的实现,包括数据处理、模型训练、预测和图形用户界面(GUI),下面是对各个部分功能的详细说明: 1. 导入必要的库 import os os.environ[CUDA_LAUNCH_BLOCKING] = 1import torch import torch.nn as nn import torch.optim as o…...
【有啥问啥】Stackelberg博弈方法:概念、原理及其在AI中的应用
Stackelberg博弈方法:概念、原理及其在AI中的应用 1. 什么是Stackelberg博弈? Stackelberg博弈(Stackelberg Competition)是一种不对称的领导者-追随者(Leader-Follower)博弈模型,由德国经济学…...
【UI自动化】前言
系列文章目录 【UI自动化】前言 自动化不能代替手工测试,自动化都是以手工测试为基础,自动化测试实现的步骤要依赖手工; 文章目录 系列文章目录【UI自动化】前言 自动化测试的类型自动化解决的问题什么是UI测试测试分类一、使用UI自动化的…...
Unity对象池的高级写法 (Plus优化版)
唐老师关于对物体分类的OOD的写法确实十分好,代码也耦合度也低,但是我有个简单的写法同样能实现一样的效果,所以我就充分发挥了一下主观能动性 相较于基本功能,这一版做出了如下改动 1.限制了对象池最大数量,多出来的…...
vue3<script setup>中computed
在 Vue 3 中,<script setup> 语法糖是 Composition API 的一种简化写法,它允许你更简洁地编写组件逻辑。在 <script setup> 中使用 computed 与在普通 <script> 标签中使用 Composition API 的方式类似,但通常我们会借助 i…...
【已解决】使用JAVA语言实现递归调用-本关任务:用循环和递归算法求 n(小于 10 的正整数) 的阶乘 n!。
本关任务:用循环和递归算法求 n(小于 10 的正整数) 的阶乘 n!。 测试说明 平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试: 测试输入:1…...
BiRefNet 教程:基于 PyTorch 实现的双向精细化网络
BiRefNet 教程:基于 PyTorch 实现的双向精细化网络 BiRefNet 是一个图像分割网络,专注于复杂任务如背景移除、掩码生成、伪装物体检测、显著性目标检测等。该模型结合了编码器、解码器、多尺度特征提取、以及梯度监督机制,能够有效处理不同类…...
Oracle 数据库安装和配置指南(新)
目录 1. 什么是Oracle数据库? 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量(Linux) 4.…...
JavaScript的注释与常见输出方式
注释 源码中注释是不被引擎所解释的,它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释,用//起头;另一种是多行注释,放在/*和*/之间。 单行注释: //这是单行注释 多行注释: /*这是 多行 注…...
深入探索Android开发之Java核心技术学习大全
Android作为全球最流行的移动操作系统之一,其开发技能的需求日益增长。本文将为您介绍一套专为Android开发者设计的Java核心技术学习资料,包括详细的学习大纲、PDF文档、源代码以及配套视频教程,帮助您从Java基础到高级特性,再到A…...
vue3 选择字体的颜色,使用vue3-colorpicker来选择颜色
1、有的时候我们会用到颜色的选择器,像element-plus提供了,但是ant-design-vue并没有: 这个暂时没有看到: 但是Ant Design 5的版本有,应该不是vue的。 2、使用第三方提供的vue3-colorpicker:storybook/cli…...
windows C++ 并行编程-使用消息块筛选器
本文档演示了如何使用筛选器函数,使异步消息块能够根据消息的有效负载接受或拒绝消息。 创建消息块对象(例如 concurrency::unbounded_buffer、concurrency::call 或 concurrency::transformer)时,可以提供筛选器函数,用于确定消息块是接受还…...
【mysql技术内幕】
MySQL之技术内幕 1.MVCC模式2. 实现mvcc模式的基础点3.MySQL锁的类型4. 说下MySQL的索引有哪些吧?5. 谈谈分库分表6. 分表后的id咋么保证唯一性呢?7. 分表后非sharding key的查询咋么处理的? 1.MVCC模式 MVCC, 是multi-version concurrency c…...
快递物流单号识别API接口DEMO下载
单号识别API为用户提供单号识别快递公司服务,依托于快递鸟大数据平台,用户提供快递单号,即可实时返回可能的一个或多个快递公司,存在多个快递公司结果的,大数据平台根据可能性、单号量,进行智能排序。 应用…...
Jetpack——Room
概述 Room是谷歌公司推出的数据库处理框架,该框架同样基于SQLite,但它通过注解技术极大简化了数据库操作,减少了原来相当一部分编码工作量。在使用Room之前,要先修改模块的build.gradle文件,往dependencies节点添加下…...
Dynamic Connected Networks for Chinese Spelling Check(ACL2021)
Dynamic Connected Networks for Chinese Spelling Check(ACL2021) 一.概述 文中认为基于bert的非自回归语言模型依赖于输出独立性假设。不适当的独立性假设阻碍了基于bert的模型学习目标token之间的依赖关系,从而导致了不连贯的问题。为些,…...
前端vue-3种生命周期,只能在各自的领域使用
上面的表格可以简化为下面的两句话: setup是语法糖,下面的两个import导入是vue3和vue2的区别,现在的vue3直接导入,比之前vue2简单 还可以是导入两个生命周期函数...
el-upload如何自定展示上传的文件
Element UI 中,el-upload 组件支持通过插槽(slot)来自定义文件列表的展示方式。这通常是通过 file-list 插槽来实现的。下面是一个使用 el-upload 组件并通过 file-list 插槽来自定义文件列表展示的完整示例代码。 在这个示例中,…...
研1日记15
1. 文心一言生成: 在PyTorch中,nn.AdaptiveAvgPool1d(1)是一个一维自适应平均池化层。这个层的作用是将输入的特征图(或称为张量)在一维上进行自适应平均池化,使得输出特征图的大小在指定的维度上变为1。这意味着&…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
