人工神经网络

前言

人工神经网络(Artificial Neural Network,ANN),通常简称为神经网络,是一种在生物神经网络的启示下建立的数据处理模型。神经网络由大量的人工神经元相互连接进行计算,根据外界的信息改变自身的结构,主要通过调整神经元之间的权值来对输入的数据进行建模,最终具备解决实际问题的能力.

神经网络概述

人类自身就是一个极好的模式识别系统。人类大脑包含的神经元数量达到 1 0 11 10^{11} 1011数量级,其处理速度比当今最快的计算机还要快许多倍。如此庞大、复杂、非线性的计算系统时刻指挥着全身的获得。当视野中出现一张熟悉的人脸时,只需数百毫秒的时间即可正确识别。尽管许多昆虫的神经系统并不发达,但仍表现出极强的识别能力。蝙蝠依靠其声纳系统搜集目标的位置、速度、目标大小等信息,最终实现声纳的口声定位以极高的成功率捕捉目标。

一般认为,生物神经并不是一开始就具备这样的识别能力的,而是在其成长过程中通过学习逐步获得的。人类出生后的几年间,大脑接收了大量的环境信息,随着经验的积累,神经元之间的相互关系不断变化,从而完成智能、思维、情绪等精神活动。与其他细胞不同,神经元细胞由细胞体P、树突D和轴突A组成。其中树突用于接收信号输入(比如,人看到美食,会分泌物质,然后在树突化学反应转化为信号),细胞体用于处理,轴突则将处理后的信号传递给下一神经元。
右图是人类模拟神经元设计的神经元, p p p表示输入信号,权值 w w w对应于突触的连接强度,细胞体对应于累加器 ∑ \sum 和传输函数 f f f,神经元输出a 代表轴突的信号。什么是传输函数? 这里假设输入信号是一个累加的关系,这关系太绝对了.需要使用一个映射函数f做为传换.常用的w输函数有:线性函数, 对数-S形函数(sigmoid)…

结构网络

一般来说,有多个输人的单个神经元并不能满足实际应用的要求。在实际应用中需要有多个并行操作的神经元,这里将这些可以并行操作的神经元组成的集合称为“层”。
在这里插入图片描述
输入层 隐含层 如果某层的输出是网络的输出,那么称该层为输出层,而其他层叫隐含层:上图中的网络有一个输出层(第 3层)和两个隐含层(第 1层和第 2层), 被称为前馈网络(Feedforward Neural Network),也被称为前向神经网络或多层感知器(Multi-Layer Perceptron,MLP)

单层感知器

感知器使用的激活函数通常是阶跃函数(如Heaviside函数)或符号函数,其根据输入的加权和决定节点是否激活。这使得感知器能够对输入数据做出二进制分类的预测。单层感知器就是包含一层权值可变的神经元的感知器模型.
在这里插入图片描述
单层感知器是感知器中最简单的一种,由单个神经元组成的单层感知器只能用来解决线性可分的二分类问题。其结构如上图所示.其通常采用纠错学习规则的学习算法(Error Correction Learning Rule)

  1. 线性组合器 ∑ \sum 的输出: v ( n ) = ∑ i = 0 N w i x i = w T ( n ) x ( n ) v(n)=\sum_{i=0}^Nw_ix_i=w^T(n)x(n) v(n)=i=0Nwixi=wT(n)x(n)
  2. 实际输出: y ( n ) = s g n ( w T ( n ) x ( n ) ) y(n)=sgn(w^T(n)x(n)) y(n)=sgn(wT(n)x(n))
  3. d ( n ) 为期望输出 , η 学习率 d(n)为期望输出,\eta学习率 d(n)为期望输出,η学习率
  4. 更新公值向量: w ( n + 1 ) = w ( n ) + η [ d ( n ) − y ( n ) ] x ( n ) w(n+1)=w(n)+\eta[d(n)-y(n)]x(n) w(n+1)=w(n)+η[d(n)y(n)]x(n)
  5. 若满足收敛条件,则结束.若不是,则回到循环步骤4

什么是收敛?当权值向量 w w w已经能正确实现分类时,算法就收敛了,但实际情况都会有误差.所以在计算时的收敛在这里插入图片描述

线性神经网络

线性神经网络与感知器的主要区别在于,感知器的传输函数只能输出两种可能的值,而线性神经网络的输出可以取任意值,其传输函数是线性函数。在这里插入图片描述
线性神经网络采用LMS 算法,也称为 A 规则(Delta Rule).其基于纠错学习规则,即最小二乘 (最小均方)算法来调整网络的权值和偏置

  1. 误差定义: e ( n ) = d ( n ) − x T ( n ) w ( n ) e(n)=d(n)-x^T(n)w(n) e(n)=d(n)xT(n)w(n)
  2. 采用均方误差作为评价指标: m s e = 1 Q ∑ k = 1 Q e 2 ( k ) , Q 为样本数 mse= {1 \over Q}\sum_{k=1}^Qe^2(k), Q为样本数 mse=Q1k=1Qe2(k),Q为样本数
  3. 线性神经网络学习的目标是找到适当的 w w w,使得误差的均方差 mse 最小。只要用 mse 对 w w w求偏导,再令该偏导等于零即可求出 mse 的极值

在实际运算中,为了解决权值 w w w维数过高,给计算带来困难的问题,会使用梯度下降法求值.

通过LMS算法线性神经网络在收敛的精度和速度上较感知器都有了较大提高,但其线性运算规则决定了它只能解决线性可分的问题。可以通过连接多个神经元节点,多个输出,形成 Madaline (多层)网络的方式解决非线性问题或者多分类问题在这里插入图片描述
线性神经网络解决线性不可分问题的另一个方法是,对神经元添加非线性输入,从而引入非线性成分,这样做会使等效的输入维度变大,如图 5-4 所示。

BP神经网络

BP 神经网络一般是多层的,与之相关的另一个概念是多层感知器 (Multi-LayerPerceptron,MLP)。多层感知器除了输入层和输出层以外,还具有若干个隐含层。BP 神经网络采用误差反向传播的学习算法(Error Backpropagation),也是基于误差的学习算法。

在这里插入图片描述
如图 6-1 所示,是一个包含2 层隐含层的 BP 神经网络的拓扑结构.BP 神经网络的特点

  1. 网络由多层构成,层与层之间全连接,同一层之间的神经元无连接。多层的网络设计,使 BP 网络能够从输入中挖掘更多的信息,完成更复杂的任务。
  2. BP 网络的传递函数必须可微,一般使用 Sigmoid 函数或线性函数作为传递函数
  3. 采用误差反向传播算法(Back-Propagation Algorithm)进行学习

BP网络使用最速下降法来调制各层权值。下面以三层BP网络为例

  • 误差定义: e j ( n ) = d j ( n ) − Y j ( n ) , j 表示对应的输出量下标 e_j(n)=d_j(n)-Y_j(n), j表示对应的输出量下标 ej(n)=dj(n)Yj(n),j表示对应的输出量下标
  • 总误差定义: e ( n ) = 1 2 ∑ j = 1 J e j 2 ( n ) e(n)= {1 \over 2}\sum_{j=1}^Je_j^2(n) e(n)=21j=1Jej2(n)

工作信号正向传播

  • 输入层第m个神经元(总量是M个)的的输出: v M m ( n ) = x ( n ) v_M^m(n)=x(n) vMm(n)=x(n)
  • 隐含层第i个神经元的输入等于 v M m ( n ) v_M^m(n) vMm(n)的加权和: u I i ( n ) = ∑ m = 0 M w m i v M m ( n ) u_I^i(n)=\displaystyle\sum_{m=0}^Mw_{mi}v_M^m(n) uIi(n)=m=0MwmivMm(n)
  • 假设f为Sigmoid函数,则隐含层第i个神经元的输出等于: v I i ( n ) = f ( u I i ) v_I^i(n)=f(u_I^i) vIi(n)=f(uIi)
  • 输出层第j个神经元的输入等于 v I j ( n ) v_I^j(n) vIj(n)的加权和: u J j ( n ) = ∑ j = 0 J w i j v I i ( n ) u_J^j(n)=\displaystyle\sum_{j=0}^Jw_{ij}v_I^i(n) uJj(n)=j=0JwijvIi(n)
  • 输出层第j个神经元的输出等于: v J j ( n ) = g ( u J j ( n ) ) v_J^j(n)=g(u_J^j(n)) vJj(n)=g(uJj(n))
  • 输出层第j个神经元的误差: e j ( n ) = d j ( n ) − v J j ( n ) e_j(n)=d_j(n)-v_J^j(n) ej(n)=dj(n)vJj(n)
  • 网络总误差: e ( n ) = 1 2 ∑ j = 1 J e j 2 ( n ) e(n)= {1 \over 2}\sum_{j=1}^Je_j^2(n) e(n)=21j=1Jej2(n)

误差信号反向传播,在权值调整阶段,沿着网络逐层反向进行调整

  • 首先调整隐含层与输出层之间的权值 w i j w_{ij} wij,根据最速下降法,应计算误差对 w i j w_{ij} wij
    梯度 ∂ e ( n ) ∂ w i j ( n ) \partial e(n) \over \partial w_{ij}(n) wij(n)e(n),再沿着该方向反向进行调整.在这里插入图片描述
  • 局部梯度等于该神经元的误差信号与传递函数导数的乘积。其的定义:在这里插入图片描述
  • 在输出层,传递函数一般为线性函数,因此其导数为 1在这里插入图片描述
  • 误差信号向前传播,对输入层与隐含层之间的权值 w m i w_{mi} wmi,进行调整.在这里插入图片描述
    至此,三层 BP 网络的一轮权值调整就完成了。调整的规则可总结为:
    权值调整量 Δ w = 学习率 η ∗ 局部梯度 δ ∗ 上一层输出信号 v 权值调整量\Delta w= 学习率\eta * 局部梯度\delta *上一层输出信号v 权值调整量Δw=学习率η局部梯度δ上一层输出信号v
    BP 网络的复杂之处在于,隐含层与隐含层之间、隐含层与输入层之间调整权值时,局部梯度的计算需要用到上一步计算的结果。前一层的局部梯度是后一层局部梯度的加权和.因此,BP 网络学习权值时只能从后向前依次计算

以线性代数视角去理解多层网络的误差信号反向传播:

  • 正向: 每一层神经元干的事情可以理解成空间映射子空间的概念,即降维。
  • 反向: 误差的调节过程是升维的过程。输出层可能就2个维度,调节完这2个维度误差后。再加1个维度调节在下一个神经元权值中

标准的最速下降法在实际应用中往往有收敛速度慢的缺点。针对标准 BP 算法的不足,出现了几种标准 BP 法的改进,如动量 BP 算法、牛顿法等。BP存在的一定的局限性:

  1. 需要的参数较多,且参数的选择没有有效的方法。确定一个 BP 网络需要知道网络的层数、每一层的神经元个数和权值。网络权值依据训练样本和学习率参数经过学习得到。隐含层神经元的个数如果太多,会引起过学习,而神经元太少,又导致欠学习。如果学习率过大,容易导致学习不稳定,学习率过小,又将延长训练时间。这些参数的合理值还要受具体问题的影响,目前为止,只能通过经验给出一个很粗略的范围,缺乏简单有效的确定参数的方法,导致算法很不稳定。
  2. 初始权重敏感性。训练的第一步是给定一个较小的随机初始权重,由于权重是随机给定的,BP 网络往往具有不可重现性
  3. 激活函数的选择很重要.引入激活函数的目的是在模型中引入非线性。如果没有激活函数(其实相当于激励函数是f(x) = x),那么无论你的神经网络有多少层,最终都是一个线性映射,那么网络的逼近能力就相当有限,单纯的线性映射无法解决线性不可分问题。

Hopfield 神经网络

前面介绍的单层感知器、线性神经网络、BP 网络以及后面的径向基函数网络等都属于前向神经网络 (或前馈神经网络).在这种网络中,各层神经元节点接收前一层输入的数据,经过处理输出到下一层,数据正向流动,没有反馈连接。

1982 年,美国加州理工学院的 J.Hopfield 教授提出了一种单层反馈神经网络,称为Hopfield 网络。Hopfield 网络是一种循环的神经网络,从输出到输入有反馈连接。Hopfield网络可以作为联想存储器,又称为联想记忆网络。主要看 Hopfield 网络是离散网络,其结构图在这里插入图片描述如图,任意两个神经元间的连接权值为 w i j , w i j = w j i w_{ij},w_{ij}=w_{ji} wijwij=wji,神经元的连接是对称的。 w i i = 0 w_{ii}=0 wii=0,即神经元自身无连接.且存在阀值 b i b_i bi,激活函数 f f f用阐值函数二值化取值0/1或-1/1.即t时刻,第i个单经元公式 x i ( t ) = ∑ j = 1 j ≠ i N w i j y i ( t ) + b i x_i(t)=\sum_{\substack{j=1\\j\neq i}}^Nw_{ij}y_i(t) + b_i xi(t)=j=1j=iNwijyi(t)+bi y i ( t + 1 ) = f ( x i ( t ) ) y_i(t+1)=f(x_i(t)) yi(t+1)=f(xi(t))
假设初始输入 X = { x 1 , x 2 , x 3 , . . . x n } , 则 Y ( 0 ) = X X=\{x_1,x_2,x_3,...x_n\}, 则Y(0)=X X={x1,x2,x3,...xn},Y(0)=X
网络从初态 Y ( 0 ) Y(0) Y(0)开始,经过有限次递归之后,如果其状态不再发生变化 Y ( t + 1 ) = Y ( t ) Y(t+1)=Y(t) Y(t+1)=Y(t),即 Y ( t + 1 ) Y(t+1) Y(t+1)则称该网络是稳定的。

Hopfield网络的联想能力

在这里插入图片描述

  1. 图 9-3 所示的演化过程中,网络状态最终收敛到一个稳定的值,因此是一种稳定的网络。
  2. 如图 9-4 所示,网络出现有限幅度的自持振荡,在有限个状态中反复循环,称为有限环网络
  3. 基于2的情况如果是无限环网络,即在无限多个状态之间变化,但轨迹并不发散到无穷远,这种现象称为混沌

因为Hopfield网络的状态有限,所以不可能出现混沌现象,概括上述的两种现象,那我们可以通过数学定义什么是稳定状态
在这里插入图片描述

为什么能达到稳定状态?
通过“动力学系统的最终行为是由它的吸引子(稳定状态)决定的”规律。利用网络的能量函数来表示当前网络状态的能量.网络的能量在网络状态按一定规则变化时,能自动趋向能量的极小点。如果把一个待求解问题的目标函数以网络能量函数的形式表达出来,当能量函数趋于最小时,对应的网络状态就是问题的最优解。在这里插入图片描述
证明过程略,最终会得出 Δ E ≤ 0 \Delta E \leq 0 ΔE0的结论,即网络最终将收敛到一个吸引子(网络稳定状态 )

能使网络稳定在同一吸引子的所有初态的集合,称该吸引子的吸引域.
在这里插入图片描述
欲使反馈网络具有联想能力,每个吸引子都应该具有一定的吸引域。只有这样,对于带有一定噪声或缺损的初始样本,网络才能经过动态演变而稳定到某一吸引子状态,从而实现正确联想。反馈网络设计的目的就是要使网络能落到期望的稳定点 (问题的解)上,并且还要具有尽可能大的吸引域,以增强联想功能。
在这里插入图片描述
在这里插入图片描述

Hopfield的权值设计

吸引子的分布是由网络的权值 (包括阙值)决定的,设计吸引子的核心就是如何设计一组合适的权值。为了使所设计的权值满足要求,权值矩阵应保证给定的样本是网络的吸引子,并且要有一定的吸引域.
在这里插入图片描述
当所需要的吸引子较多时,可采用Hebb规则外积法

在这里插入图片描述
在这里插入图片描述
事实上,当网络规模n一定时,要记忆的模式数越多,联想时出错的可能性越大;反之,要求的出错概率越低,网络的信息存储容量上限越小。研究表明存储模式数 P 超过0.15n 时,联想时就有可能出错。错误结果对应的是能量的某个局部极小点,或称为伪吸引子。提高网络存储容量有两个基本途径:改进网络的拓扑结构;二是改进网络的权值设计方法。常用的改进方法有:反复学习法、纠错学习法、移动兴奋门限法、伪逆技术、忘记规则和非线性学习规则等。

随机神经网络

Hopfield网络是寻找最低能量状态的过程及BP网络寻最小损失值的过程都使用了梯度下降法.梯度下降法只能按照能量(损失)函数递减的方式演化,很难避免伪状态的出现,而且容易陷入局部极小值,无法收敛于全局最优点。

模拟退火算法

模拟退火算法是随机网络中解决能量局部极小问题的一个有效方法,其基本思想是模拟金属退火过程。

金属退火过程大致是,先将物体加热至高温,使其原子处于高速运动状态此时物体具有较高的内能;然后,缓慢降温,随着温度的下降,原子运动速度减慢,内能下降;最后,整个物体达到内能最低的状态。

模拟退火过程相当于沿水平方向晃动托盘温度高则意味着晃动的幅度大,小球肯定会从任何低谷中跳出,而落人另一个低谷。这个低谷的高度(网络能量)可能比小球原来所在低谷的高度低 (网络能量下降),但也可能反而比原来高(能量上升)。
在这里插入图片描述
后一种情况的出现,从局部和当前来看,这个运动方向似乎是错误的;但从全局和发展的角度看,正是由于给小球赋予了“爬山”的本事,才使它有可能跳出局部低谷而最终落人全局低谷。当然,晃动托盘的力度要合适,并且还要由强至弱 (温度逐渐下降),小球才不致因为有了“爬山”的本领而越爬越高。

Boltzmann机

Boltzmann 机的随机神经网络只有两种输出状态,即单极性二进制的0或 1。状态的取值根据概率统计法则决定,由于这种概率统计法则的表达形式与著名统计力学家 LBoltzmann 提出的 Boltzmann分布类似,故将这种网络取名 Boltzmann Machine(BM)。在这里插入图片描述

  1. BM 网络具有输人节点、隐节点和输出节点.BM网络与Hopfield网络相似,具有对称权值,即 w i j = w j i 且 w i i = 0 w_{ij}=w_{ji}且 w_{ii}=0 wij=wjiwii=0
  2. 神经元净输入: n e t j ( t ) = ∑ i = 1 j ≠ i N w i j x i ( t ) + b j net_j(t)=\sum_{\substack{i=1\\j\neq i}}^Nw_{ij}x_i(t) + b_j netj(t)=i=1j=iNwijxi(t)+bj
  3. 神经元总的转移函数: x j ( t ) = f ( n e t j ( t ) ) x_j(t)=f(net_j(t)) xj(t)=f(netj(t))
  4. 激活函数f使用的Boltzmann 分布: p j ( 1 ) = 1 1 + e − x j / T , 即把 x j 传进去返回值为 1 的概率是 p j ( 1 ) , 当 x j = 0 , p j ( 1 ) = 0.5 p_j(1)= {1 \over 1+e^{-x_j/T}}, 即把x_j传进去返回值为1的概率是p_j(1),当x_j=0,p_j(1)=0.5 pj(1)=1+exj/T1,即把xj传进去返回值为1的概率是pj(1),xj=0,pj(1)=0.5
  5. 从网络能量去描述降温过程,其中 E ( t ) 表示 t 时整个网络的能量 E(t)表示t时整个网络的能量 E(t)表示t时整个网络的能量在这里插入图片描述
  6. 从网络能量表示网络的稳定性在这里插入图片描述在这里插入图片描述

    从式中可以得出状态稳定两点结论,也是采用模拟退火方法搜索全局最小的原因:

    1. BM 网络处于某一状态的概率主要取决于此状态下的能量 E,能量越低,概率越大;
    2. BM 网络处于某一状态的概率还取决于温度参数 丁,温度越高,不同状态出现的概率越接近,网络能量较易跳出局部极小而搜索全局最小;温度低则情况相反。

BM 网络的学习算法

学习的目的是通过调整网络权值使训练集中的模式在网络状态中以相同的概率再现。学习过程可分为两个阶段

  • 第一阶段称为正向学习阶段:将网络输人输出节点的状态“钳制”到期望的状态,而让隐节点自由活动,以捕捉模式对之间的对应规律;
  • 第二阶段称为反向学习阶段或自由运行期,对于异联想学习,用输人模式“钳住”输人节点而让隐节点和输出节点自由活动,以体现网络对输人输出对应规律的模拟情况。

输人输出的对应规律表现为网络达到热平衡时,相连节点状态同时为1的平均概率。期望对应规律与模拟对应规律之间的差别就表现为两个学习阶段所对应的平均概率的差值,此差值便作为权值调整的依据

如何获取热平衡相连节点状态同时为1的平均概率.假设训练集提供了P对模式
在这里插入图片描述
在这里插入图片描述

过程中包括小循环与大循环:

  • 在小循环中,温度保持恒定,算法选择不同的神经元进行状态调整,达到热平衡后进行降温,进入新的温度下的小循环。
  • 大循环是指整个降温、计算的过程,当大循环结束后,算法也就结束了。
  • 初始温度的选择方法与模拟退火算法类似,可以随机选择网络中的n个神经元,取其能量的方差,或随机选择若干神经元,取其能量的最大差值。

如何通过平均概率,调整权值 w i j w_{ij} wij
在这里插入图片描述

上述主要思路:

  1. 正向学习,通过热平衡(大小循环)算出 p i j p_{ij} pij
  2. 返回学习,通过热平衡(大小循环)算出 p i j ′ p'_{ij} pij
  3. 修改权值 w i j w_{ij} wij,再重新正反学习,直到 Δ w i j → 0 \Delta w_{ij} \rarr 0 Δwij0

受限玻尔兹曼机(RBM)

玻尔兹曼机的计算复杂度较高,并且它的收敛速度较慢.受限玻尔兹曼机(restricted Boltzmann machine,RBM)是玻尔兹曼机的一个变体。与玻尔兹曼机相比,受限玻尔兹曼机的结构更加简单,因为它没有循环边。这意味着受限玻尔兹曼机中的单元只能与层间相连,而不能与同层相连
在这里插入图片描述
其结构如上左图所示,可见层充当两个角色(输入,输出).因此将其展开如右图所示.两边权值相等( w i j = w j i w_{ij}=w_{ji} wij=wji).如果一个 BRM 有n个可见单元和m个隐单元,且用 向量 v 和 h 向量v和h 向量vh分别表示可见单元和隐单元的状态。其中, v i v_i vi表示第i个可见单元的状态, h j h_j hj表示第j个隐单元的状态。

  1. 对于一组给定的状态 ( v , h ) (v,h) (v,h),其能量在这里插入图片描述
  2. 基于该能量函数, 我们可以得到 ( v , h ) (v, h) (v,h)的联合概率分布,其中 Z ( θ ) Z(θ) Z(θ)为(总能量)归一化因子在这里插入图片描述
  3. 在这里插入图片描述
  4. 使用最大似然法,得出最大概率 θ \theta θ,其中T为样本数.在这里插入图片描述
  5. 在这里插入图片描述
  6. 在这里插入图片描述在这里插入图片描述

关于Gibbs采样,主要依赖马氏链的数学定义:“状态转移的概率只依赖前一个状态”

主要参考

《人工神经网络理论、设计及应用》
《MATLAB神经网络原理与实例精解》
《LDA数学八卦》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【金猿案例展】昆仑银行——一体化智能可观测平台全面保障昆仑银行业务稳定性...

‍ 博睿数据案例 本项目案例由博睿数据投递并参与“数据猿年度金猿策划活动——2023大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 根据中国人民银行&#xff0c;中国银保监会颁布的【关于金融行业贯彻<推进互联网协议第六版…

【JavaEE进阶】 @RequestMapping注解

文章目录 &#x1f384;什么是RequestMapping 注解&#x1f333;RequestMapping 使⽤&#x1f332;RequestMapping 是GET还是POST请求&#xff1f;&#x1f6a9;使用Postman构造POST请求 ⭕总结 &#x1f384;什么是RequestMapping 注解 在Spring MVC 中使⽤ RequestMapping 来…

使用Google OSV工具扫描依赖安全漏洞

安全漏洞是软件工程化能力的试金石 2021年年底&#xff0c;Log4j的漏洞陆续被公开。因为该框架被大量的开源软件依赖&#xff0c;所以&#xff0c;漏洞影响面非常大。 面对这个漏洞&#xff0c;我们遇到的第一个问题是&#xff1a;如何知道我们哪些工程使用了Log4j&#xff1f;…

基于ssm的程序设计实践项目管理系统+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实践项目管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

NFC物联网智能学生宿舍系统设计方案

随着物联网技术的不断发展&#xff0c;智慧城市、智能家居、智慧校园的建设也在如火如茶地进行。本文结合物联网发展过程中相关的技术&#xff0c;应用到智慧校园的建设过程中&#xff0c;将学生宿舍打造成舒适、安全的集体空间&#xff0c;该系统可以对学生宿舍实现智能开门、…

华为发布的工业软件三大难题:适用于CAD领域的NURBS裁剪曲面自交快速检测

以下内容转载&#xff1a; 自相交&#xff0c;在几何图形有效性验证中的一个错误类型&#xff0c;面要素的自相交在原始数据中是最常见的&#xff0c;这种错误有些可以人工发现&#xff0c;但有些就需要借助程序来发现。 发生自相交的根本原因情况比较多&#xff0c;有些是因为…

微服务全链路灰度方案介绍

目录 一、单体架构下的服务发布 1.1 蓝绿发布 二、微服务架构下的服务发布 三、微服务场景下服务发布的问题 四、全链路灰度解决方案 4.1 物理环境隔离 4.2 逻辑环境隔离 4.3 全链路灰度方案实现技术 4.3.1 标签路由 4.3.2 节点打标 4.3.3 流量染色 4.3.4 分布式链路…

[NISACTF 2022]checkin

[NISACTF 2022]checkin wp 进入页面看到源代码&#xff1a; 尝试直接 GET 传参&#xff0c;但是失败了。 题目中给出了提示&#xff1a; 那么就复制源码&#xff0c;再粘贴成文本&#xff1a; 可以看到代码发生了变化&#xff0c;部分代码顺序颠倒。 以 Notepad 编辑&#x…

Java设计模式-外观模式

目录 一、影院管理项目 二、外观模式 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;原理类图 &#xff08;三&#xff09;解决影院管理 &#xff08;四&#xff09;注意事项和细节 &#xff08;五&#xff09;外观模式在MyBatis框架应用的源码分析 一…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 1.windeployqt简介 2.打包具体过程 1&#xff09;用vscode编译&#xff0c;生成Release文件夹&#xff08;也有Debug文件夹&#xff0c;但是发布版本一般都是用Release&#xff09; 2&#xff09;此时可以看下Release文件夹内&#xff0c;一般是.exe可执行…

LeetCode---377周赛---Floyd算法+字典树

题目列表 2974. 最小数字游戏 2975. 移除栅栏得到的正方形田地的最大面积 2976. 转换字符串的最小成本 I 2977. 转换字符串的最小成本 II 一、最小数字游戏 这题看懂题意就好&#xff0c;可以结合示例模拟一下&#xff0c;你就会发现规律&#xff0c;本质就是将数组排序&a…

【C语言】一篇文章深入解析联合体和枚举且和结构体的区别

文章目录 &#x1f4dd;前言&#x1f320; 联合体类型的声明&#x1f309;联合体的特点 &#x1f320;相同成员的结构体和联合体对⽐&#x1f309;联合体⼤⼩的计算 &#x1f320;联合体应用&#x1f309;枚举类型的声明 &#x1f320;枚举类型的优点&#x1f309; 枚举类型的使…

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装 1、环境2、安装包下载3、安装3.1 、解压3.2、配置3.3、编译安装3.4 、启动与关闭 4、安装 uuid-ossp 、plpython2u插件5、参考 1、环境 centos 7 、 postgresql 10.19 2、安装包下载 postgres 源码安装包 3、安…

Git基础学习_p1

文章目录 一、前言二、Git手册学习2.1 Git介绍&前置知识2.2 Git教程2.2.1 导入新项目2.2.2 做更改2.2.3 Git追踪内容而非文件2.2.4 查看项目历史2.2.5 管理分支&#x1f53a;2.2.6 用Git来协同工作2.2.7 查看历史 三、结尾 一、前言 Git相信大部分从事软件工作的人都听说过…

共享单车之数据存储

文章目录 第1关&#xff1a;获取工作簿中的数据第2关&#xff1a;保存共享单车数据 第1关&#xff1a;获取工作簿中的数据 相关知识 获取工作簿中的信息&#xff0c;我们可以使用Java POI&#xff08;POI是一个提供API给Java程序对Microsoft Office格式档案读和写的功能&#…

[数据结构]树与二叉树的性质

文章目录 0.二叉树的形态和基本性质1.完全二叉树的叶子节点个数2.树的叶子节点个数3.线索二叉树4.树和森林和二叉树5.平衡二叉树的最少结点数6.树/二叉树/森林的转换 0.二叉树的形态和基本性质 一棵二叉树具有5中基本形态n个结点可以构造的二叉树种数: C2n-n/n1 一棵树 n个结点…

GC6208国产5V摄像机镜头驱动IC ,可用于摄像机,机器人等产品中可替代AN41908

GC6208是一个镜头电机驱动IC摄像机和安全摄像机。该设备集成了一个直流电机驱动器的Iris的PID控制系统&#xff0c;也有两个通道的STM电机驱动器的变焦和对焦控制。 芯片的特点: 内置用于Iris控制器的直流电机驱动器 内置2个STM驱动程序&#xff0c;用于缩放和…

【SD】inpaint 模型 - 换脸术 ☑

文生图-局部重绘 涂抹脸部 关键词添加lora&#xff1a; <lora:Naruto_zilaiye:1.5>, 生成图&#xff1a;

【音视频 ffmpeg 学习】 跑示例程序 持续更新中

环境准备 在上一篇文章 把mux.c 拷贝到main.c 中 使用 attribute(unused) 消除警告 __attribute__(unused)/** Copyright (c) 2003 Fabrice Bellard** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated docu…

.NetCore NPOI 读取excel内容及单元格内图片

由于数据方提供的数据在excel文件中不止有文字内容还包含图片信息&#xff0c;于是编写相关测试代码&#xff0c;读取excel文件内容及图片信息. 本文使用的是 NPOI-2.6.2 版本&#xff0c;此版本持.Net4.7.2;.NetStandard2.0;.NetStandard2.1;.Net6.0。 测试文档内容&#xf…