当前位置: 首页 > news >正文

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记

导论

神经网络的研究方法分为

  • 连接主义,生理学派,模拟神经计算。高度的并行、分布性,很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。
  • 符号主义,心理学派,基于符号推演。便于实现人脑的高级认知功能(逻辑思维)。
  • 行为主义,控制论学派,控制进化。强调智能系统与环境的交互,进行自学习、自适应。

机器学习导论

  • 有监督学习:
    • 回归问题预测值。有线性回归等模型。
    • 分类问题预测类别。有逻辑回归(基于线性模型和sigmod做二分类)、SVM(找到最大超平面,改变维度)、朴素贝叶斯
  • 无监督学习:
    • kmeans(聚类):将相似的点归为一类,总共划分k个类。相似度度量有欧式距离、汉明距离、余弦距离等。
    • PCA(降维)
      请添加图片描述

生物神经网络

树突传入信号,细胞体进行处理,轴突输出信号。
当前神经元的轴突与下一个神经元的树突间通过突触连接,突触分为兴奋和抑制型。
细胞体接收信号,如果为抑制型则膜电位降低,兴奋反之。当神经元的膜电位到达阈值,会放电,并将此信号继续传播。实现信号的传递,并最终导致人的认知与活动。

大脑的学习过程就是神经元之间连接强度随外部信息做自适应变化。学习结果由神经元的状态表现出来。

ANN特点

对应对生物神经网络:

  • 输入连接-树突
  • 输出连接-轴突
  • 权重-突触
  • 求和与激活函数-细胞体

空间上知识分布存储,时间上并行处理,容错性高(可以处理不完整、有噪音的信息,泛化),自学习、自组织、自适应,解为满意解而非精确解(不一定全局最优,但是全局较好)

在结构建模分为:

  • 前馈型。神经元的输出只会作为下一层神经元的输入,影响下面的层。例如CNN。
  • 反馈型。神经元的输出还会作为当前层或之前层神经元的输入。这使得网络能有记忆功能,能考虑过去的信息,适用于处理时序数据。例如RNN。(反馈型与反向传播无关)
  • 竞争学习网络。是一种无监督学习方法,神经元会相互竞争并根据胜败调整权重。适用于聚类分析等领域。

ANN领域面临的挑战:

  • 需要大数据集。
  • 弱标签、无标签数据远多于有标签数据。
  • 超参数调优。权值参数可以自学习,但超参数需要根据经验和实验来设置。现在有个方向Neural Architecture Search,NAS神经网络搜索,通过搜索求出高性能的网络结构。
  • 过拟合。
    • 欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;模型复杂度过低、特征量过少。这个不算挑战,只能算训练不到位。
    • 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。样本数量过少、样本质量不佳无法代表整体样本分布、模型复杂度过高等。
  • 不透明。神经网络模型本质是黑盒算法,可解释性和可靠性较差。
  • 不灵活。一个模型的训练和设计针对了某个特定场景,那就只能用于这个特定场景,通用性差。现在有迁移学习,即根据已有知识学习新知识,找到新旧知识的相似性。当然最热门的还是大模型,AGI(Artificial General Intelligence,通用人工智能)。

感知机

感知机基于M-P模型。有加权、求和、激励三个部分。
y = f ( ∑ i = 1 n w i x i + θ ) y = f\left( \sum_{i=1}^{n} w_i x_i + \theta \right) y=f(i=1nwixi+θ)
为了拟合非线性函数(比如解决异或问题),需要多层次、多神经元。

训练中会基于当前模型参数产生实际输出,与样本输出存在差距,即损失值loss,这个计算函数就是损失函数。

请添加图片描述

我们给训练定了个最终目标,即最小化一个与模型相关的函数,这个函数就是目标函数。目标函数基于损失函数,还引入了正则项等参数以及求均值等方法。我们的梯度下降等进行参数更新的操作,就是为了最小化目标函数的输出。

ps: 感觉这块有人特地区分,有人随便弄混,大概了解一下就行,实际交流中懂的人自然懂。

Rosenblatt感知机是一个多层感知机,采用{-1,1}的阈值函数。课件中的例题是损失值为 ( w x + b ) ∗ y − y (wx+b)*y-y (wx+b)yy,如果不为0就要调整,调整方式就是 w = w + 学习率 ∗ y ∗ x , b = b + 学习率 ∗ y w=w+学习率*y*x,b=b+学习率*y w=w+学习率yx,b=b+学习率y。直到所有样本输出都与实际输出相等。

请添加图片描述

激活函数

激活函数执行对神经元输入值的变换。由于若干线性单元叠加还是线性单元,所以在多层网络结构中要使用非线性映射来拟合复杂的目标。

请添加图片描述

Sigmoid

  • 非线性映射。当 x 的绝对值很大时,接近阈值函数(只输出0或1),可以做二分类;当x接近0时,梯度接近1即线性映射,在训练初始阶段加速收敛。同时单调连续、无限次可微有利于使用梯度下降。
  • 但是x绝对值很大时,梯度接近为0(即存在饱和区,这个范围内输出几乎不变)。在反向传播中实际上是对于激活函数求导,那么在链式乘法中乘小于1的数,梯度会指数级下降,即会导致梯度消失。此外,sigmoid的输出范围为(0,1),始终大于0(非0对称),在梯度下降中权重都会朝着同一个大方向改变,不能够有正有反,这影响收敛速度与性能。

请添加图片描述

Tanh

比起sigmoid,实现了0对称 ( − 1 , 1 ) (-1,1) (1,1),同时在x较小时斜率更大、收敛速度更快。但还是存在梯度消失的问题。

请添加图片描述

Relu

没有指数运算,计算简单效率高,收敛速度快。但非零对称。
对于左图,梯度为0会导致权值无法更新。
而右图的leaky relu对于x小于0的部分做了调整,不会导致神经元失效。且函数的两个部分都是线性的,无饱和区,不会出现梯度消失。

请添加图片描述

训练优化

梯度下降

训练目标是最小化目标函数,那么就要求目标函数对每个权值参数的偏导,因为梯度方向是下降最快的方向。
对于多元函数,使用偏导求各个权重在对应方向的梯度。
梯度只是个方向,还有下降的步长,称为学习率。

batch_size

batch_size是每次梯度下降时使用的样本数。

  • =1,随机梯度下降SGD
  • =N,批量梯度下降BGD
  • 1<size<N, 小批量梯度下降SGD
    size小时,学习快速,内存消耗少,方便在线模型的更新。下降方向的波动大,有利于跳出鞍点,但因为少量样本的下降方向与正确方向存在误差,也减慢了收敛速度。
    size大也不一定学习慢,因为可以利用并行计算加速矩阵运算。

SGD是一种折中方案,常用。

梯度下降优化器

  • 动量法。引入动量和动量学习率两个参数。动量其实就是历史梯度的累积。基于先前的动量和当前梯度更新当前动量,基于当前动量更新权值。当梯度平缓时加速收敛,当陷入鞍点时有概率被动量扯着越过鞍点。由于结合了历史动量,即使梯度方向变化大也会变平缓、更新更平滑,减少震荡。

请添加图片描述

  • Nesterov方法是对传统动量法的改进。唯一的变动就是求梯度的部分。动量法用的是当前梯度,而Nesterov是将当前位置按动量走一下,然后再求梯度。大概思想是先用动量探索一下,如果当前梯度大,就可以走更多,梯度小就少走一点。收敛速度比动量法快。

    请添加图片描述

  • AdaGrad。Ada就是自适应,将学习率动态调整。学习率部分有一个变量,是历史梯度的平方和。这导致起始时整个学习率较大,随着梯度下降的执行学习率变小。加速收敛。缺点是当历史梯度平方和很大很大时,学习率趋近于0,梯度消失。

请添加图片描述

  • RMSProp。加了一个 β \beta β衰减系数,用于对历史历史梯度做加权平均,可以减少久远梯度信息的影响力。

请添加图片描述
请添加图片描述

  • Adam。RMSProp+Momentum。两者都用了衰减系数。
    请添加图片描述

反向传播

梯度下降是求目标函数对某个参数的偏导。目标函数在网络的输出层,对于深层网络,求偏导需要一个很长度的链式求导。

通过下图可以看到前向求导和反向求导的区别。虽然这个图因为对称所以看不出来,其实反向求导的计算量会小很多。所以前向传播最终得到loss,再反向根据loss求偏导,再下降梯度。

请添加图片描述

CNN

卷积层、下采样层(池化层)、全连接层。

神经网络的前面的层捕获各个位置的特征,越往后特征图越大,即捕获更精细的特征

卷积层:通过卷积在不同位置共享一个卷积核上的参数。局部感知,权重共享。
池化层:通过减少特征图大小,减少计算消耗,同时能有效处理过拟合问题。
全连接层:将三维的特征图做flatten做几次FC。将卷积层得到的局部特征整合成全局特征。
模型的最后一层使用 Softmax 函数将原始分数转换为概率分布,然后使用交叉熵损失函数计算损失。

特征图大小
featuremap_size = ⌊ image_size − kernel_size + 2 × padsize stride ⌋ + 1 \text{featuremap\_size} = \left\lfloor \frac{\text{image\_size} - \text{kernel\_size} + 2 \times \text{padsize}}{\text{stride}} \right\rfloor + 1 featuremap_size=strideimage_sizekernel_size+2×padsize+1

AlexNet

  • 使用Relu
  • 提出了Dropout提高性能和泛化性
  • 使用最大池化
  • 使用了LRN局部响应归一层。抑制大值,增强小值,提高模型的泛化能力和对抗过拟合能力。
  • 使用了ImageNet数据集

googlenet

  • 使用不同大小的卷积核捕获不同尺寸的输入输出。进行多尺寸特征提取和特征融合。

  • 使用 1 ∗ 1 1*1 11的卷积核减少通道数,减少计算量

    请添加图片描述

  • 辅助分类器。提供额外的梯度信号,起到了正则化效果。
    请添加图片描述

ResNet

请添加图片描述

  • 残差,将前面层的一些参数通过捷径直接传到较后面的层,与后面的输出相加再继续往下传播,避免了梯度消失问题,并将粗糙和精细的特征融合。
  • 通过适当的卷积核大小来控制特征图的shape以便不同层的输出特征图可以相加。
  • 批归一化(batch normalization),对图像标准化处理,加速收敛。

Densnet

在ResNet的基础上将残差连接增多。

请添加图片描述

RNN

激活函数为tahn,域值为 [ − 1 , 1 ] [-1,1] [1,1]

请添加图片描述

需要实现n to m的转换

BPTT

请添加图片描述

在时间轴上链式求偏导,变成了一个和前面时间的偏导的连乘

请添加图片描述

请添加图片描述

LSTM

请添加图片描述

  1. 遗忘门计算短时记忆信息与当前信息的关系,用sigmoid映射到 [ 0 , 1 ] [0,1] [0,1],得到抛弃短时记忆的程度。

    请添加图片描述

  2. 输入门计算,计算 i t i_t it查看短时记忆和当前输入的关系,用sigmoid映射到 [ 0 , 1 ] [0,1] [0,1],判断添加输入到长时记忆中。计算 C ^ t \hat C_t C^t计算一个此次要被添加的长时记忆值。tanh只是一个激活函数,和sigmoid作用不一样。

    请添加图片描述

  3. 更新长时记忆。求出短时记忆被遗忘后的剩余,以及此次要被添加的输入,相加得到更新后的当前时刻的长时记忆。
    请添加图片描述

  4. 更新短时记忆。根据当前时刻的输入值,更新下一时刻的短时记忆。
    请添加图片描述

sigmoid用来表示门的开闭,tanh调节数据范围,并通过正负值起到增减的作用。

LSTM也是用BPTT训练,但是推导之后发现连乘可以变成加法形式,缓解梯度爆炸/消失的情况。

GRU

只有重置门和更新门。 r t r_t rt计算多少历史记忆进入候选状态。 h ^ t \hat h_t h^t是候选状态,得到一个临时的输入。然后更新 h t h_t ht,历史信息要添加的越多,当下添加的就越少。
简化了门数量和参数量,效率高,适合实时计算。但没有专门维护长时记忆,只适合简单序列。

请添加图片描述

运算过程:
请添加图片描述

seq2seq

encoder-decoder框架,分了两个结构,两边都可以套RNN的各种模型,但是效果更好,因为直接使用单模型只能根据上文理解,而先encode可以理解完整个上下文,然后再decode就能结合到整个上下文的信息,对语义的理解更好。

attention

Q(与其他单词的匹配度)、K(其他单词与本单词的匹配度)、V(本单词的编码向量)
首先根据输入乘权重得到每个单词的qkv
a i = w ∗ x i , q i = a i ∗ W Q , k i = a i ∗ W K , v i = a i ∗ W V a_i=w*x_i,\ q_i=a_i*W^Q,\ k_i=a_i*W^K,\ v_i=a_i*W^V ai=wxi, qi=aiWQ, ki=aiWK, vi=aiWV
然后a对b的匹配度点乘b对a的匹配度(余弦相似度),然后除以一个东西,得到注意力权重
除以的这个是一个单词的维度,是为了将分布重新变为 ( 0 , 1 ) (0,1) (0,1)的分布,softmax也是归一。
α i , j = s o f t m a x ( q i ∗ k j T r a n s p o s e d q , k ) \alpha_{i,j}=softmax(\frac{q_i*k^{Transpose}_j}{\sqrt{d_{q,k}}}) αi,j=softmax(dq,k qikjTranspose)
然后乘注意力权重就是其他单词到本单词的注意力值
a t t e n t i o n i = ∑ a i , j ∗ v i attention_i=\sum a_{i,j}*v_i attentioni=ai,jvi
上面是自注意力,整体使用到了QKV矩阵。类比卷积核,每个卷积核可以识别不同的特征,我们这里也可以将QKV分成多份,即不是QKV,而是 Q i 、 K i 、 V i Q_i、K_i、V_i QiKiVi,让每组QKV识别一种特征,这就是多头注意力。计算后将结果拼接、降维,得到注意力值。

请添加图片描述

Transformer

• 完全依赖注意力机制来刻画各个单词间的全局依赖关系
• 利用类似残差结构有效的防止梯度消失的问题
• 在自然语言处理中单词的输入是并行的,大大加快了计算效率

  • Encoder
    生成词嵌入->位置编码->多头注意力->归一,注意还有个分支是残差,将原始信息直接与细节信息融合。然后加个前馈网络。

归一化服从正态分布,加快收敛。

位置编码是因为,在RNN和LSTM中数据被依次处理,有历史记忆和当前输入的这种前后关系。而注意力机制虽然用的也是时序数据,但求QKV的乘法并没有体现前后顺序,只是排列组合,同一个单词放在开头和末尾的得分是一样的。所以这里需要将位置信息编码进输入数据中。
请添加图片描述

  • Decoder
    有个mask层,因为对于token是并行处理的,比如I love you是decoder的输入,当encoder处理完我爱你之后,在处理I时,通过掩码把love you盖住(改为很大的负数,softmax为0),不让他直接知道当前位置的未来答案,让解码只依赖当前位置之前的信息。
    除了这个将未来信息盖住,还有个对齐操作,因为每个批次输入数据长度不一致,需要后补很大的负数。encoder其实也做了这个。

而第二个multiattention的KV来自encoder,Q来自mask。
请添加图片描述

bert

将Encoder堆至少12层。
请添加图片描述

VIT

vision transformer,将transformer用于cv。transformer以token作为处理单位,vit将图像分割为块(patch),并将patch作为处理单位。同时也需要对图像进行位置编码。

考题

三种学习方法,有导师学习、无导师学习和增强学习有什么不同?

  • 有导师学习(Supervised Learning)
    • 定义:有导师学习是指在训练过程中提供带有标签的数据给算法,让算法通过学习这些带有正确答案的数据来建立一个模型,从而对新的未知数据进行预测或分类。
    • 特点:需要大量的标记数据;学习过程相对直接,容易评估模型性能。
    • 应用:广泛应用于图像识别、语音识别、情感分析等任务。
    • 总结:依赖于已知结果的示例来指导学习过程,适合解决预测和分类问题。
  • 无导师学习(Unsupervised Learning)
    • 定义:无导师学习是在没有标签的情况下进行的,算法试图从未标记的数据中发现内在的结构或规律。
    • 特点:不需要标签数据,因此可以处理大量未标注的数据;目标通常是为了找到数据的分布模式或降维。
    • 应用:常用于聚类、关联规则挖掘、异常检测等任务。
    • 总结:尝试在没有明确指导的情况下发现数据的内在结构,适用于探索性数据分析。
  • 增强学习(Reinforcement Learning)
    • 定义:增强学习是一种通过试错来学习的方法,它关注的是如何采取行动以最大化某种累积奖励。在这个过程中,智能体(Agent)通过与环境互动来学习最佳策略。
    • 特点:不需要预先标记的数据集;学习过程是一个长期的决策过程,强调的是行动与环境之间的交互。
    • 应用:适用于游戏、机器人导航、资源管理等需要做出一系列决策的问题。
    • 总结:通过与环境的交互来优化行为策略,适合处理需要连续决策的问题。

计算题

(最终期末考的题)生物神经元的结构画图和各部分功能、三种梯度下降不同批度的特点以及批量梯度下降的优缺点、动量法和学习率自适应法的特点及例子、PPT上roseblatt、根据一个卷积层核和池化层核求输出的特征图尺寸、一个前馈网络的梯度下降和反向传播中的参数、RNN前向计算、LSTM和GRU的介绍和比较、ResNet和DenseNet的比较、transformer的Encoder和Decoder的结构以及各部分功能。

优化器种类

SGD、动量法、Nestrov、AdaGrad、Adam

反向传播例题

目标函数一般用的是
( y ^ − y ) 2 2 \frac{(\hat{y}-y)^2}{2} 2(y^y)2
注意前向计算过程有z=wx+b、y=f(z),最后还有一个E=E( y ^ \hat y y^,y),这些要链式。

对sigmoid激活函数求偏导得到
∂ f ( x ) x = f ( x ) ∗ ( 1 − f ( x ) ) \frac{\partial f(x)}{x}=f(x)*(1-f(x)) xf(x)=f(x)(1f(x))

请添加图片描述

对目标函数求偏导很容易,就是 y ^ − y \hat{y}-y y^y。wy+b对w求偏导就是y。
请添加图片描述

卷积核计算

1 ∗ 28 ∗ 28 1*28*28 12828的输入图大小
经过 25 ∗ 3 ∗ 3 25*3*3 2533的卷积核
padding为0,stride为1
28 − 3 + 2 ∗ 0 1 + 1 = 26 \frac{28-3+2*0}{1}+1=26 1283+20+1=26
同时通道数为卷积核数25,即得到特征图 25 ∗ 26 ∗ 26 25*26*26 252626。此时每个卷积核用到的参数是 3 ∗ 3 3*3 33个。
然后经过 2 ∗ 2 2*2 22的max_polling,假设一次走那么大的尺寸,即
26 2 = 13 \frac{26}{2}=13 226=13
因为池化层没有卷积核,所以通道数不变。 25 ∗ 13 ∗ 13 25*13*13 251313
再来个 50 ∗ 3 ∗ 3 50*3*3 5033的卷积核,即
13 − 3 1 + 1 = 11 \frac{13-3}{1}+1=11 1133+1=11
注意输入图的通道数不是1,所以是一个卷积核与每个图通道的对应位置做卷积,然后对生成的25张图做求和得到一个图,然后50个卷积核就得到50个通道数,即新特征图的通道数等于卷积核个数。 50 ∗ 11 ∗ 11 50*11*11 501111。此时每个卷积核用到的参数是 25 ∗ 3 ∗ 3 25*3*3 2533个。

再经过 2 ∗ 2 2*2 22的max_polling,即
11 2 = 5 \frac{11}{2}=5 211=5
得到 50 ∗ 5 ∗ 5 50*5*5 5055

AlexNet卷积核计算

Input:227x227x3
First layer (CONV1): 96 11x11 filter,stride 4
227 − 11 4 + 1 = 55 , 96 ∗ 55 ∗ 55 ,使用参数为 3 ∗ 11 ∗ 11 ∗ 96 \frac{227-11}{4}+1=55,96*55*55,使用参数为3*11*11*96 422711+1=55,965555,使用参数为3111196
Second layer (POOL1): 3x3 pooling,stride 2
55 − 3 2 + 1 = 27 , 96 ∗ 27 ∗ 27 , 使用参数为 0 \frac{55-3}{2}+1=27,96*27*27,使用参数为0 2553+1=27,962727,使用参数为0

RNN计算

只考虑前向
请添加图片描述

请添加图片描述

相关文章:

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记 导论 神经网络的研究方法分为 连接主义&#xff0c;生理学派&#xff0c;模拟神经计算。高度的并行、分布性&#xff0c;很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。符号主义&#xff0c;心理学派&#xff0c;基于符号…...

【面试题】简单聊一下什么是云原生、什么是k8s、容器,容器与虚机相比优势

云原生&#xff08;Cloud Native&#xff09; 定义&#xff1a;云原生是一种构建和运行应用程序的方法&#xff0c;旨在充分利用云计算的优势。它涵盖了一系列技术和理念&#xff0c;包括容器化、微服务架构、自动化部署与管理等。特点&#xff1a;云原生应用程序被设计为可弹性…...

Vue 3 Diff 算法过程及基本实现方式

Vue 3 的 Diff 算法 Vue 3 使用的是一种高效的 DOM Diff 算法&#xff0c;主要用于在虚拟 DOM 树发生变化时&#xff0c;计算最小的操作以更新真实 DOM。相比 Vue 2&#xff0c;Vue 3 的 Diff 算法做了很多优化。 Diff 算法的背景与目的 虚拟 DOM 树的对比&#xff1a;在 Vue…...

EasyCVR视频汇聚平台如何配置webrtc播放地址?

EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。平台支持多协议接入&#xff0c;能将接入到视频流转码为多格式进行分发&#xff0c;包括RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、W…...

PowerApps助力PowerBI实现数据写回

原文发布日期: 2019-08-01 06:03:50 0000 注&#xff1a;本文旨在介绍Power BI如何利用PowerApps实现用户在前端对数据源进行增删查改&#xff0c;关于此&#xff0c;你也可以在Google上找到更详细但较零散的资料 正文 在SSAS多维数据集中&#xff0c;开发者可以给数据开启&q…...

数据结构:DisjointSet

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做&#xff0c;Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合&#xff0c;用来确定两个元素是否同属一个集合等&#xff0c;是效率最高的常见数据结构之一。 Wiki链接&#xff1a;https://en…...

React 元素渲染

React 元素渲染 React 是一个用于构建用户界面的 JavaScript 库&#xff0c;它允许开发人员创建大型应用程序&#xff0c;这些应用程序可以随着时间的推移而高效地更新和渲染。React 的核心概念之一是元素渲染&#xff0c;它描述了如何将 JavaScript 对象转换为 DOM&#xff0…...

【Leetcode 每日一题】3270. 求出数字答案

问题背景 给你三个 正 整数 n u m 1 num_1 num1​&#xff0c; n u m 2 num_2 num2​ 和 n u m 3 num_3 num3​。 数字 n u m 1 num_1 num1​&#xff0c; n u m 2 num_2 num2​ 和 n u m 3 num_3 num3​ 的数字答案 k e y key key 是一个四位数&#xff0c;定义如下&…...

eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)

ACL实验&#xff08;Access Control List访问控制列表&#xff09;是一种基于包过滤的访问控制技术&#xff0c;它可以根据设定的条件对接口上的数据包进行过滤&#xff0c;允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机。 准备工作 在eNSP里面部署设备&a…...

【git】-2 分支管理

目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 ​​​​​​【git】-初始gi…...

硬件设计-齐纳管

目录 摘要 详情 齐纳管的工作电流、 摘要 齐纳管&#xff08;Zener Diode&#xff09;是一种特殊的二极管&#xff0c;它能够在特定的反向电压下保持电流稳定。正常情况下&#xff0c;二极管只允许正向电流通过&#xff0c;而阻止反向电流流过。而齐纳管在一定的反向电压下可…...

Github出现复杂问题 无法合并 分支冲突太多 如何复原

目录 问题再现 解决思路 当然我所指的是在 main 分支开一个新的分支 删除本地文件夹 重新克隆 开一个新分支 切换分支 下载远程分支 文件覆盖 合并到主分支 ​​​​​​​问题再现 太复杂了 无法更改 编译器现状 全部崩溃了 无法更改 即使创建一个新的分支也无济于…...

《分布式光纤传感:架设于桥梁监测领域的 “智慧光网” 》

桥梁作为交通基础设施的重要组成部分&#xff0c;其结构健康状况直接关系到交通运输的安全和畅通。随着桥梁建设规模的不断扩大和服役年限的增长&#xff0c;桥梁结构的安全隐患日益凸显&#xff0c;传统的监测方法已难以满足对桥梁结构健康实时、全面、准确监测的需求。分布式…...

java_抽象类最佳实践-模板设计模式

基本介绍 模板设计模式可解决的问题 最佳实践 Template类 package com.hspedu.abstract_; abstract public class Template { //抽象类-模板设计模式public abstract void job();//抽象方法public void calculateTime() {//实现方法&#xff0c;调用 job 方法//得到开始的时间…...

linux网络 | http结尾、理解长连接短链接与cookie

前言&#xff1a;本节是http章节的最后一部分&#xff0c;主要解释一些小概念。讲解到了HTTP的方法&#xff0c;表单&#xff0c; 重定向等等。 现在废话不多说&#xff0c; 开始我们的学习吧。 ps&#xff1a;本节内容都是概念&#xff0c; 知道就行&#xff0c; 友友们放心观…...

dtdug汇编指令练习

r 通用寄存器 m 代表内存 imm 代表立即数 r8 代表8位通用寄存器 m8 代表8位内存 imm8 代表8位立即数 mov指令练习 MOV 的语法: mov 目标操作数&#xff0c;源操作数 作用:拷贝源操作数到目标操作数 1、源操作数可以是立即数、通用寄存器、段寄存器、或者内存单元. 2、目标操作数…...

Windows自动化Python pyautogui RPA操作

依赖包 import time import pyautogui import pyperclip import os import psutil from pywinauto.application import Application睡眠&#xff1a; pyautogui.sleep(1)鼠标事件&#xff1a; pyautogui.moveTo(100, 100, duration0.25) pyautogui.click(100, 100, duration0.…...

Ollama私有化部署大语言模型LLM

目录 一、Ollama介绍 二、安装Ollama 1、标准安装 2、国内加速 三、升级Ollama版本 四、使用Ollama 1、启动ollama服务 systemctl start ollama.service ollama serve 2、使用ollama命令 ollama run 运行模型 ollama ps 查看正在运行的模型 ollama list 查看(本地)…...

ubuntu/kali安装c-jwt-cracker

1.下载安装包 可以去GitHub下载解压&#xff0c;我这直接在kali克隆下来了。&#xff08;网络不好可能克隆不下来&#xff09; git clone https://github.com/brendan-rius/c-jwt-cracker.git 2.如果下载的压缩包就需要进行解压&#xff0c;克隆的直接进入目录就好了。 unzi…...

MySql按年月日自动创建分区存储过程

-- 创建存储过程【通过数据库和表名】建立【partition_number】get分区&#xff0c;分区间隔为【gaps】 -- datasource 数据库名称 -- table_name 数据库表名 -- partition_number 新建分区的数量 -- partition_type 分区类型&#xff08;0-按天分区&#xff0c;1-按月分区&…...

Spring配置文件中:密码明文改为密文处理方式(通用方法)

目录 一、背景 二、思路 A) 普通方式 B) 适合bootstrap.properties方式 三、示例 A) 普通方式&#xff08;连接Redis集群&#xff09; A) 普通方式&#xff08;连接RocketMQ&#xff09; B) 适合bootstrap.properties方式 四、总结 一、背景 SpringBoot和Sprin…...

树的模拟实现

一.链式前向星 所谓链式前向星&#xff0c;就是用链表的方式实现树。其中的链表是用数组模拟实现的链表。 首先我们需要创建一个足够大的数组h&#xff0c;作为所有结点的哨兵位。创建两个足够大的数组e和ne&#xff0c;一个作为数据域&#xff0c;一个作为指针域。创建一个变…...

计算机图形学【直线和圆的生成算法】

在计算机图形学中&#xff0c;光栅化是将几何图元转换成一个光栅图像&#xff08;像素或点&#xff09;在屏幕上输出的过程。光栅化可实现图形变为二维图像&#xff0c;其目的是将连续的几何图形转换为离散的像素点。光栅化算法的基本原理包括两个主要步骤&#xff1a;首先&…...

OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性

本文作者&#xff1a; 容器服务团队&#xff1a;刘佳旭、冯诗淳 可观测团队&#xff1a;竺夏栋、麻嘉豪、隋吉智 一、前言 Kubernetes(K8s)架构已经是当今 IT 架构的主流与事实标准&#xff08;CNCF Survey[1]&#xff09;。随着承接的业务规模越来越大&#xff0c;用户也在使…...

【深度学习】Pytorch:加载自定义数据集

本教程将使用 flower_photos 数据集演示如何在 PyTorch 中加载和导入自定义数据集。该数据集包含不同花种的图像&#xff0c;每种花的图像存储在以花名命名的子文件夹中。我们将深入讲解每个函数和对象的使用方法&#xff0c;使读者能够推广应用到其他数据集任务中。 flower_ph…...

vue js实现时钟以及刻度效果

2025.01.08今天我学习如何用js实现时钟样式&#xff0c;效果如下&#xff1a; 一、html代码如下&#xff1a; <template><!--圆圈--><div class"notice_border"><div class"notice_position notice_name_class" v-for"item in …...

js基础---注释与结束符

JavaScript 基础&#xff1a;注释与结束符 注释 注释是代码中用于解释说明的部分&#xff0c;不会被执行&#xff0c;主要有两种类型&#xff1a; 单行注释 符号&#xff1a;//作用&#xff1a;从符号开始到该行末尾的所有内容都会被忽略&#xff0c;不会被执行。示例代码&…...

from pytorch3d import _C问题

离线安装pytorch3d后&#xff0c;先测试&#xff1a; import pytorch3d 没问题后&#xff0c;再测试&#xff1a; from pytorch3d import _C 单独测试会出现&#xff1a; ImportError: libc10.so: cannot open shared object file: No such file or directory 或者类似不…...

PHP进阶-在Ubuntu上搭建LAMP环境教程

本文将为您提供一个在Ubuntu服务器上搭建LAMP&#xff08;Linux, Apache, MySQL, PHP&#xff09;环境的完整指南。通过本文&#xff0c;您将学习如何安装和配置Apache、MySQL、PHP&#xff0c;并将您的PHP项目部署到服务器上。本文适用于Ubuntu 20.04及更高版本。 一、系统更新…...

SQLite 命令

关于《SQLite 命令》的文章&#xff0c;我可以为您提供一个概要。SQLite是一个轻量级的嵌入式关系数据库管理系统&#xff0c;它以单个文件的形式存储数据&#xff0c;非常适合用于不需要传统数据库服务器的场景。SQLite3的命令行工具&#xff08;sqlite3.exe&#xff09;是一个…...

ASP.NET Core 实现微服务 - Consul 配置中心

这一次我们继续介绍微服务相关组件配置中心的使用方法。本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大&#xff0c;还是让我爱不起来。因为前面我们已经介绍了使用Consul 做为服务注册发现的组件 &#xff0c;那么干脆继续使用 Consul 来作为配置…...

自定义Java注解及其应用

上一篇博客&#xff1a;Java注解 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。…...

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…...

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知&#xff0c;彩色图像由一个个像元组成&#xff0c;每个像元又由红、绿、蓝&#xff08;RGB&#xff09;三通道构成。而相机传感器只能感知光的强度&#xff0c;无法直接感知光谱信息&#xff0c;即只有亮暗而没有颜色…...

用户注册模块用户校验(头条项目-05)

1 用户注册后端逻辑 1.1 接收参数 username request.POST.get(username) password request.POST.get(password) phone request.POST.get(phone) 1.2 校验参数 前端校验过的后端也要校验&#xff0c;后端的校验和前端的校验是⼀致的 # 判断参数是否⻬全 # 判断⽤户名是否…...

【大数据】Apache Superset:可视化开源架构

Apache Superset是什么 Apache Superset 是一个开源的现代化数据可视化和数据探索平台&#xff0c;主要用于帮助用户以交互式的方式分析和展示数据。有不少丰富的可视化组件&#xff0c;可以将数据从多种数据源&#xff08;如 SQL 数据库、数据仓库、NoSQL 数据库等&#xff0…...

如何搭建 Vue.js 开源项目的 CI/CD 流水线

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

OCR文字识别—基于PP-OCR模型实现ONNX C++推理部署

概述 PaddleOCR 是一款基于 PaddlePaddle 深度学习平台的开源 OCR 工具。PP-OCR是PaddleOCR自研的实用的超轻量OCR系统。它是一个两阶段的OCR系统&#xff0c;其中文本检测算法选用DB&#xff0c;文本识别算法选用CRNN&#xff0c;并在检测和识别模块之间添加文本方向分类器&a…...

国产3D CAD将逐步取代国外软件

在工业软件的关键领域&#xff0c;计算机辅助设计&#xff08;CAD&#xff09;软件对于制造业的重要性不言而喻。近年来&#xff0c;国产 CAD 的发展态势迅猛&#xff0c;展现出巨大的潜力与机遇&#xff0c;正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …...

GoLand 如何集成 Netty?

目录 1.回答问题&#xff1a; 2.以下是实现类似 Netty 功能的步骤&#xff1a; 2.1 实现基本的网络通信功能&#xff1a; 3. 使用 Go 的第三方库实现 Netty 功能 4.实现类似 Netty 的事件循环&#xff1a; 5. 运用场景&#xff1a; 1.回答问题&#xff1a; 要在 GoLand 中…...

C++中 为什么要把基类指针指向子类对象?

为什么要把基类指针指向子类对象&#xff1f; 1&#xff09;实现多态性 动态绑定行为&#xff1a;通过基类指针指向子类对象&#xff0c;可以利用 C 的多态机制。当基类中有虚函数&#xff0c;并且子类重写了这些虚函数时&#xff0c;通过基类指针调用虚函数&#xff0c;实际调…...

2025年第三届“华数杯”国际赛A题解题思路与代码(Matlab版)

游泳竞技策略优化模型代码详解&#xff08;MATLAB版&#xff09; 第一题&#xff1a;速度优化模型 本部分使用MATLAB实现游泳运动员在不同距离比赛中的速度分配策略优化。 1. 模型概述 模型包含三个主要文件&#xff1a; speed_optimization.m: 核心优化类plot_speeds.m: …...

做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)

图&#xff1a; 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据&#xff0c;支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…...

深入探索 ScottPlot.WPF:在 Windows 桌面应用中绘制精美图表的利器

一、ScottPlot.WPF 简介 ScottPlot.WPF 是基于 ScottPlot 绘图库专门为 Windows Presentation Foundation (WPF) 框架量身定制的强大绘图组件。它无缝集成到 WPF 应用程序中,为开发者提供了一种简洁、高效的方式来可视化数据,无论是科学研究中的实验数据展示、金融领域的行情…...

Spring bean的生命周期和扩展

接AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客&#xff0c;以具体实例看bean生命周期的一些执行阶段 bean生命周期流程 生命周期扩展处理说明实例化:createBeanInstance 构造方法&#xff0c; 如Autowired的构造方法注入依赖bean 如UserSer…...

【Docker】docker compose 安装 Redis Stack

注&#xff1a;整理不易&#xff0c;请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是&#xff1f; 简单来说&#xff0c;Redis Stack 是增强版的 Redis &#xff0c;它在传统的 Redis 数据库基础上增加了一些高级功能和模块&#xff0c;以支持更多的使用场景和需求。Redis…...

Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)

1. 终身学习简介 神经网络的典型应用场景是,我们有一个固定的数据集,在其上训练并获得模型参数,然后将模型应用于特定任务而无需进一步更改模型参数。 然而,在许多实际工程应用中,常见的情况是系统可以不断地获取新数据,例如 Web 应用程序中的新用户数据或自动驾驶中的…...

JavaEE之线程池

前面我们了解了多个任务可以通过创建多个线程去处理&#xff0c;达到节约时间的效果&#xff0c;但是每一次的线程创建和销毁也是会消耗计算机资源的&#xff0c;那么我们是否可以将线程进阶一下&#xff0c;让消耗计算机的资源尽可能缩小呢&#xff1f;线程池可以达到此效果&a…...

错误修改系列---基于RNN模型的心脏病预测(pytorch实现)

前言 前几天发布了pytorch实现&#xff0c;TensorFlow实现为&#xff1a;基于RNN模型的心脏病预测(tensorflow实现)&#xff0c;但是一处繁琐地方 一处错误&#xff0c;这篇文章进行修改&#xff0c;修改效果还是好了不少&#xff1b;源文章为&#xff1a;基于RNN模型的心脏病…...

修改之前的代码使得利用设备树文件和Platform总线设备驱动实现对多个LED的驱动【只是假想对LED进行驱动,并没有实际的硬件操作】

引言 在下面这篇博文中&#xff1a; 利用Linux的Platform总线设备驱动实现对多个LED的驱动【只是假想对LED进行驱动,并没有实际的硬件操作】 我们利用Platform总线设备驱动的思想实现了对多个LED的驱动。 Platform总线设备驱动以及其它的总线设备驱动都将驱动分成了三个部分…...