深度学习(学习记录)
题型:填空题+判断题30分、简答题20分、计算题20分、综合题(30分)
综合题(解决实际工程问题,不考实验、不考代码、考思想)
一、深度学习绪论(非重点不做考察)
1、传统机器学习:人工特征工程+分类器
- 概念:传统机器学习通过数据样本采集和人工特征工程,辅之以相对简单的数学模型(线性回归、Logistic回归、决策树、朴素贝叶斯等),实现对数据分布规律的学习或客观世界规律的建模。
- 存在的问题:数据量大规模提升,人工特征工程难以精准,模型复杂度有限,表达能力不足。
2、感知机:最简单的人工神经网络、只有一个神经元。也可看作线性分类器的简单算法。
- 缺陷:无法解决线性不可分问题(异或)
- 改进(增强表达能力):增加层数(两层可以解决异或问题)
3、前馈神经网络:增加了input尺寸、增加了隐层数目、全连接网络、引入非线性变换。
- 网络参数求解问题:BP算法
- 网络训练:MiniBatch-SGD小批量随机梯度下降,优点:相比传统的梯度下降收敛速度更快、相比随机梯度下降梯度更新方向相对更稳定更精确。有更好的并行化能力、对内存的需求相对小。
二、卷积神经网络(重点)
1、卷积神经网络是一种前馈神经网络。卷积神经网络是受到生物学启发而产生的,它涉及感受野、神经元激活等机制,具有平移、缩放和扭曲不变性,在计算机视觉比赛中达到了超越人类表现的水准。
-
感受野:指前一层输入数据中影响该神经元输出的区域大小,一般由卷积核的大小核步幅(stride)确定。通过层层堆叠卷积层和池化层神经元感受野会逐渐增大。
-
卷积核:一个数字矩阵,可以在输入数字上滑动执行卷积操作,主要用来提取特征,卷积核的参数是可以学习的。
2、卷积神经网络的基本结构及其作用
- 输入层:输入层主要包含对原始图像进行预处理,包括中心化、归一化、(主成分分析)等,查阅资料好像不会涉及涉及PCA这种相交复杂的。
- 卷积层:卷积层使用卷积核对输入进行不同层次的特征提取。卷积核中的参数可以通过方向传播算法进行学习。
- 激活函数层:激活函数层主要是将卷积层的输出做一个非线性映射。常见的激活函数包括sigmoid,tanh,Relu,leakly Relu。
- 池化层:池化层主要用于参数量的压缩、减低特征图的尺寸。可以减轻过拟合情况。常见的有平均池化和最大池化。
- 全连接层:全连接层主要指两层网络,所以的神经元之间都有权重连接。常见用于网络的最后一层,用于计算类别的得分。
3、卷积核、特征图尺寸计算、卷积的有效性
- 特征图尺寸计算:
- 假设图像大小5 * 5、卷积核(Filter)大小3 * 3,步长(Stride):2,填充(Padding):1
- O = (W - F + 2P) / S + 1 = (5 - 3 + 2 * 1) / 2 + 1 = 3
- 卷积为什么有效:
- 训练CNN在相当意义上是训练每一个卷积层的滤波器。让这些滤波器对特点的模式有高的激活,以达到CNN网络的分类或检测等目的。
- 卷积神经网络的第一个卷积层的滤波器用来检测低阶特征如边、角、曲线等,随着卷积层的增加,对应滤波器检测的特征就更加复杂。比如第二个卷积层的输入实际就是第一层的输出,这一层的滤波器是用来接触低阶特征的组合等情况(半圆、四边形)等,如此积累,以检测越来越复杂的特征。
- 所以某种意义上,构建卷积神经网络的任务就在于构建这些滤波器,也就是,将滤波器变成(改变滤波矩阵的值,Weight)-- 能够识别特定的特征,这个过程就叫做训练。
- 总结:卷积神经网络之所以有效,是因为它通过层层卷积操作和特征提取,逐渐从简单到复杂地捕捉和学习数据的特征。这种逐层提取特征的方式使网络能够自动发现数据中的模式和结构,从而实现对复杂特征的抽象表征和高效学习。
- 卷积核里面的值是如何定义的?
- 也即是权值初始化问题,初始化方法:随机初始化(效果不好)、高斯初始化(效果不好)、Xavier初始化(对sigmoid还行)、He初始化(Relu较好)
4、池化的特点、作用、怎么实现特征不变性、怎么实现特征降维。
- 池化的特点:特征不变性、特征降维(如何实现的)
- 特征不变性:池化对图像压缩时去除掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
- 特征降维:池化操作可以把一些对图像分类作用不大的冗余信息去除,把重要的特征抽取出来。
- 池化的作用:一定层度上防止过拟合、特征压缩、减少参数量。
5、卷积神经网络的激活函数
- 是否可以使用sigmoid函数?使用sigmoid函数存在什么问题?
- 答:可以使用sigmoid函数但不是首选,sigmoid 函数存在以下问题:a.梯度消失,sigmoid函数在接近饱和区时,梯度数值非常小接近0,导致梯度消失。b.输出不是零中心化:sigmoid函数值输出0~1,容易在训练中出现偏差,不利于收敛,c.计算量大:相较于Relu,sigmoid函数包含指数运算。
- Relu函数的优点:
- 答:a.防止梯度弥散:Relu函数在正区间内梯度始终为1,避免的梯度过度减小情况,有利于梯度信息流通,加快训练过程。b.加速度计算过程:Relu计算公式简单,不涉及指数运算,能加快计算。c.稀疏激活特性:Relu在负数输入时输出为0,导致了神经元的稀疏激活特性,相当于减少神经网络参数,有助于减少过拟合风险。
- Relu函数的缺点和改进方法:
- 答:缺点:“死亡Relu”问题,输入为负数,输出为0,可能导致在训练过程中,某些神经元输出一直为0,导致对应权值无法更新。改进:Leakly Relu,可以在负数区域引入一个小斜率(比如0.01)来解决神经元死亡问题。
6、全连接层的作用,以及特征图的展开:
- 全连接层的作用:全连接层的目的是将网络学习到的特征映射到样本的标记空间中。
- 特征图的展开
- 直接展开:指的是将卷积和池化等层产生的多维特征图转换成一维向量,以便输入到全连接层进行处理。展开操作通常是将特征图中的每个通道按顺序展开成一个长向量,这样就能保留特征图中的空间信息,并转换为全连接层可以处理的一维形式。
- 全局卷积或者全局池化:把分布式特征映射到样本标记空间。
- 过程:用n个和特征图一样大小尺寸的卷积核对最后的特征图进行卷积,把整幅图像变成一个数,每个通道累加成一个数。
- 最后得到n个数组成一维向量。
- 优点:空间结构性被忽略,鲁棒性增加。
- 由于全连接的特性,一把情况下全连接层的参数是最多的。
7、参数共享和稀疏连接:
- 参数共享:参数共享是指CNN中卷积层的神经元使用相同的权重值(卷积核参数),可以减少模型参数数量核计算量,使得网络对平移不变性具有更好的适应性。(侧重于参数的共用)
- 稀疏连接:某个输出值的计算结果仅仅与某一区域有关,而与其他区域无关。(侧重网络的连接方式,局部连接,能够有效的减少参数量和计算的复杂度)
8、Dropout的思想、流程、怎么解决了过拟合
- Dropout的思想:在训练过程中以一定的概率(0.2~0.5)随机删除隐藏神经元,其对应的权重在这次训练中不更新,减少模型复杂度,并防止神经网络过度拟合训练数据。
- Dropout的流程:
- 首先随机(临时)删除网络中一半的隐藏神经元,输入输出保持不变;
- 然后将输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。
- 然后重复:恢复被删除的神经元(被删除的恢复原样,没删除的有了更新);从隐藏层神经元随机选择一个一半大小的子集临时删除(需要备份被删除的神经元参数);对于一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新(w,b)(没有被删除的那一部分参数得到更新,删除的保持被删除前的结果)
- 如何实现让某些神经元以一定概率停止工作?
- 训练网络的每一个单元要添加一个概率流程(Bernoulli函数生成0,1概率矩阵)。
- 预测模型的时候每一个神经元权重参数要乘以概率p(缩放)。
- Dropout解决过拟合:
- 取平均作用:Dropout掉不同隐藏神经元类似在训练不同网络,随机删除神经元导致网络结构不同,整个Dropout过程就相当于对不同的神经网络取平均,而不同网络产生不同过拟合,互为”反向“的拟合相互抵消达到整体上减少过拟合。
- 减少神经元之间复杂的共适应关系:Dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样的权值更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效果的情况。
9、基本卷积神经网络小结:
- 结构和功能:卷积神经网络主要由:卷积层、激活层、池化层和全连接层组成。卷积层执行局部特征提取的卷积运算,激活层引入非线性激活函数,池化层负责降采样以减少参数数量与计算量,全连接层将前面的特征进行整合并输出计算结果。
- 原理与应用:CNN通过卷积运算学习局部空间特征。随着网络层级的增加,特征从简单的边缘和纹理转变为更复杂的语义信息。由于局部连接和权值共享的特性,卷积神经网络在参数数量和计算成本上远低于传统的全连接神经网络,特别擅长处理具有类似网络结构的数据(如图像)
10、经典的神经网络(Alexnet,ZFnet,VGG,Googlenet,Resnet)部分参考了计算机视觉
- Alexnet:
- 提出了卷积层加全连接层的卷积神经网络(更深的网络)
- 首次使用了Relu激活函数
- 首次提出了Dropout0.5正则化控制过拟合
- 使用加入动量的小批量梯度下降法加速训练过程的收敛。
- 使用了数据增强策略极大的抑制了过拟合
- 利用了GPU并行计算,加速网络训练和推断
- ZFnet(了解)
- 基于Alexnet微调
- 使用交叉熵损失函数
- 使用了较小的卷积核(Filter)
- VGG
- VGG16包含16个隐层(13个卷积)
- 为什么小卷积核替换大卷积核能实现更优的性能?(重点)
- 答:A.多个小卷积核串联可以获得和大卷积核一样的感受野。B.多个小卷积核加深了网络结构,使得非线性能力更强,可以提取更抽象的高阶特征。C.相对使用大卷积核参数更少。
- 为什么VGG网络前四段里,每经过一次池化操作,卷积核个数就增加一倍?(非重点)
- 答:A.池化操作可以减小特征图尺寸,降低显存占用。B.增加卷积核个数有助于学习更多的结构特征,但会增加网络参数数量以及内存消耗。C.一减一增的设计平衡了识别精度与存储、计算开销。D.最终提升了网络性能!
- VGG模型优缺点:
- 优点:小卷积核、通道数多、层数更深特征图更宽
- 缺点:VGG耗费更多的计算资源,使用了更多的参数(全连接层参数多)
- Googlenet(了解)
- 网络特点:
- 引入了inception结构:保持网络结构的稀疏性,又利用密集矩阵的高性能计算(增加网络深度核宽度的同时减少参数)
- 使用1 * 1卷积核进行降维以及映射处理
- 添加了两个辅助分类器帮助训练(解决梯度消失)
- 丢弃全连接层,使用平均池化层(大大减少模型参数)
- 网络特点:
- Resnet(重点)
- 针对的问题:在不断增加神经网络的深度时,会出现一个退化问题,准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合问题,因为不仅是测试集误差增大,训练集误差也增大。
- 残差网络解决了:深度神经网络中的梯度消失和网络退化问题。
- 残差结构为什么有效?
- 答:A.正向计算:Resnet的残差连接允许直接的、跨层的信号传递。即使当前正方向计算的数值为0也至少有前一层输入X传递过来作为下一层的输入,能保证信息正向流通。B.反向传播:由于存在残差连接,反向计算局部梯度时至少还有一个局部梯度数值1进行反向流通,不至于梯度彻底为0。C.集成学习:残差网络可以看成一些列路径集合组装而成的集成模型,通过组合多个这样的模块,网络可以充分利用不同路径的信息,有助于提高网络的性能和鲁棒性。
三、基本图像处理
1.计算机视觉四大主流任务:(基本概念理解)
- 图像分类:标注图像的类别或标签。目标:将图像分为不同的类别或标签。这涉及将图像映射到预定义的类别,例如识别图像中的动物种类或区分数字手写体的数字。
- 语义分割:将图像的每个像素分类为特定的类别,但不区分不同实例。目标:对图像中的每个像素进行分类,将其标记为属于特定类别。这意味着将图像分成多个区域,并为每个像素分配一个语义标签,从而理解图像中不同部分的内容。
- 实例分割:不仅在像素级别对图像进行分类,还区分同一类别中的不同物体实例。目标:与语义分割类似,但更进一步,它不仅对图像进行像素级别的分类,而且还能够区分同一类别中不同物体的个体实例。这意味着能够在图像中准确地识别并分割出不同的物体实例。
- 目标检测:不仅检测图像中的物体,还确定它们的位置和类别,通常通过边界框来表示每个物体。目标:检测图像中存在的物体,并确定它们的位置和类别。通常采用边界框来框出每个物体,同时标识其所属的类别。
2.计算机视觉、数字图像处理、计算机图像学的区别(应该是填空判断)
- 计算机视觉:模仿人眼和大脑”看图“和”理解“的过程;输入是图片,输出是模型/识别结果等从图像中提取的信息。如:背景分割、运动检测、物体识别、人脸识别等
- 数字图像处理:是在看图前对图像进行的各种预处理工作,包括已有的图像进行变换、分析、重构、像素级的处理。输入是图像、输出也是图像。如:图像增强、去噪、滤镜等
- 计算机图像学:是利用计算机进行图像生成,输入是模型,输出是图像。例如:指纹生成、3D特效、游戏电影制作
- 输入:图像 。如果输出是图像:数字图像处理 如果输出是知识:计算机视觉
- 输入:知识 。如果输出是图像:计算机图像学 如果输出是知识:智能过程
3、图像的处理部分(实验内容了解就行不考代码)(基于skimage)
-
图像的读取和展示:
from skimage import io image = io.imread('image.jpg') io.imshow()
-
图像的数字矩阵格式
print(image)
-
RGB三通道输出
R_channel = image[:,:,0] G_channel = image[:,:,1] B_channel = image[:,:,2] plt.imshow(R_channel,cmap='Reds') plt.imshow(G_channel,cmap='Greens') plt.imshow(B_channel,cmap='Blues')
-
颜色的转化
from skimage import color img_gray = color.rgb2gray(image) img_hsv = color.rgb2hsv(image)
-
基本图像绘制
image[100:300,800:900,0]=100 image[100:300,800:900,1]=100 image[100:300,800:900,2]=100
-
图像的形变、缩放、和亮度变化
from skimage import transform,exposure rotated_image = transform.rotate(image,45) resized_image = transform.rescale(image,0.5) brughtened_image = exposure.adjust_gamma(image,gamma=0.5)
4、图像滤波
-
图像滤波的目的:消除图像中混入的噪声(去噪)、为图像识别提取图像特征(特征增强)
-
平滑滤波
-
基本方法:简单平均法和高斯滤波
-
高斯滤波:(重点:高斯滤波思想)
-
思想:利用高斯函数构建一个二维核滤波器。这个核的中心元素具有最大的权重,并且权重随着离中心点的增加而减小,符合高斯分布的形状。
-
生成步骤:
-
1.确定卷积核尺寸,比如5 * 5
-
设置高斯函数标准差比如sigma=1
G σ = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 G_\sigma = \frac{1}{{2\pi\sigma^2}} e^{-\frac{(x^2 + y^2)}{2\sigma^2}} Gσ=2πσ21e−2σ2(x2+y2) -
计算卷积核各位置权重值
-
对权重就行归一化
-
-
-
-
边缘检测
-
Roberts算子、Prewitt算子、Sobel算子**(Roberts算子大概率一个计算)**
-
Robers算子:常见的基于梯度边缘检测方法它使用简单的卷积操作来检测图像中的边缘。水平和垂直方向的两个卷积核分别用于检测图像中的水平和垂直边缘。
-
基本计过程:roberts算子_哔哩哔哩_bilibili
-
Prewitt算子和Sobel算子的计算:prewitt和sobel算子_哔哩哔哩_bilibili
- Prewitt算子:一种用于边缘检测的算子,它是一种离散的差分算子,可以检测图像中的垂直和水平边缘。Prewitt算子有两个核,分别用于检测图像的水平和垂直边缘。(对角线核也有)
- Sobel算子:一种经典的边缘检测算子,用于检测图像中的边缘,特别是水平和垂直方向的边缘。它由两个卷积核组成,分别用于水平和垂直边缘检测。(对角线核也有)
-
Canny算子:(重点背诵:每一步、作用)
- 基本流程:
- 高斯平滑噪声:用高斯滤波平滑图像-----去除噪声
- 梯度计算:用sobel等算子计算梯度幅值和方向-----得到可能边缘
- 非极大值抑制:对梯度幅值进行非极大值抑制-----消除边误检
- 双阈值边缘连接:用双阈值算法检测和边缘连接-----筛选边缘信息:强边缘、弱边缘、非边缘
- 利用滞后技术跟踪边界-----将弱边缘与周边强边缘连接形成完整边缘。
- 非极大值抑制:如果当前像素的梯度幅值不是沿着梯度方向上的局部最大值,则将该像素值抑制为零(即非极大值点被抑制)。这样做可以使得边缘更细化,只保留局部梯度方向上的极大值点。
- 双阈值算法检测和边缘连接:(了解)
- 双阈值算法:设置一个高阈值和一个低阈值,若梯度幅值高于高阈值认为是强边缘;若梯度幅值介于高阈值和低阈值之间认为是弱边缘;若梯度幅值小于低阈值认为是非边缘。
- 边缘连接:对于强边缘像素,认定为最终边缘。对于弱边缘像素,如果它周围有强边缘像素,那么将其作为边缘的一部分。通过检查弱边缘像素的邻域,如果与强边缘像素相连(一般指8邻域或4邻域),则将弱边缘像素也标记为边缘。
- 基本流程:
-
各种梯度算子效果对比:
- Robert算子:擅长降低噪音和梯度较大的图像,但是边缘提取比较粗糙。
- Prewitt算子:对灰度渐变和噪声较多的图像处理较好
- Sobel算子:对灰度渐变和噪声较多的图像处理较好
- Laplacian算子:对于阶跃性边缘点比较好,但是对噪音敏感,容易产生不连续的边缘检测
- Canny算子:抗噪音较好,对于弱边缘检测较好(一般情况下效果最佳)。(记住)
-
5、图像分割
-
阈值分割:在阈值分割中,通常将图像的灰度值与单个阈值进行比较。像素灰度值高于阈值的部分被分为一类,低于阈值的部分被分为另一类。这样的分割方法适用于简单的二值化(二分类)图像分割。
-
基于Otsu算法(大津算法)的阈值分割方法步骤:(重点)
- 灰度化处理:把图像转为灰度图
- 计算灰度:计算全部平均灰度值w
- 划分:选定一个阈值T把所有像素分成N0,N1两个部分
- 计算灰度:计算N0的灰度W0,计算N1的灰度W1
- 计算类间方差:g=N0 * (W0 - W)^2 + N1 * (W1 - W)^2
- 遍历查找:采样遍历法找到一个T,使得g最大
6、膨胀、腐蚀、开运算、闭操作运算(基本概念理解,功能作用)
- 膨胀:它通过卷积一个核或结构元素,将核与图像中的像素对齐,如果核下的像素与图像中的任意一个像素匹配(至少有一个相交的位置),则输出像素为前景像素(白色)
- 作用:用于连接物体的断开部分,填充物体边缘的空隙,并增加物体的尺寸。
- 腐蚀:如果核下的所有像素都与图像中的像素匹配,则输出像素为前景像素(白色);否则输出像素为背景像素(黑色)
- 作用:用于去除图像中的小白点,收缩物体,分离相连物体。
- 开运算:首先对图像进行腐蚀操作,然后再对结果进行膨胀操作。
- 作用:平滑较大物体的边界,去除小物体。
- 闭运算:首先对图像进行膨胀操作,然后再对结果进行腐蚀操作。
- 作用:填充物体内部的小洞,连接相邻物体。
- 去除毛刺、小噪声点可以使用:腐蚀操作、开运算
- 填补空洞可以使用:膨胀操作、闭运算
7、霍夫变换和模板匹配 (不怎么考察、了解)
- 霍夫变换:用于检测图像中几何形状的技术 ,特别是用于检测直线和圆形等形状。
- 基本思想:将图像空间中的几何形状映射到参数空间中的一个特定位置,通过对参数空间的分析来检测原始图像中的几何形状。这种转换实现了对图像空间中的图形几何属性的检测和描述,即使图像中存在噪声或者干扰,也能较好地进行检测和识别。
- 模板匹配:在给定图像中寻找与已知模板或样板图像最相似的区域。
- 基本过程:
- 选择模板: 定义一个待搜索的小图像模板,该模板是我们要在源图像中寻找的特定图案或目标。
- 计算相似度: 将模板与源图像的不同位置进行比较,通常使用像素级的比较方法。比较可以采用多种方式,如平方差匹配、相关性匹配或归一化交叉相关性匹配(NCC)等。
- 寻找最佳匹配位置: 在源图像中滑动模板,并计算模板与源图像局部区域的相似度。找到相似度最高的位置,即表示找到了最佳匹配位置。
- 标记匹配位置: 根据相似度的阈值或最大值确定匹配位置,并在源图像中标记出这些位置。
- 基本过程:
四、神经网络的优化
1、衡量参数
- 几个衡量模型表现的参数(要会计算、判断什么情况下哪个好)会画那个表格
- Accuracy = (TP + TN)/(TP + FP + TN + FN)
- Acc是预测正确的样本数与总样本数之比
- 图片分类Acc高就好,如果类别分布不均衡Acc高可能不一定好(地震预测没预测对真发生情况)
- Precision = TP/(TP + FP)
- Pre是预测为正例的样本中,实际为正例的比例
- 适用于在于假正例相对成本较高的情况,比如医疗诊断
- Recall = TP / (TP + FP)
- 衡量了模型能够正确识别出的正例样本所占的比例
- 当存在遗漏真正例会造成较大影响的场景下(比如疾病诊断),召回率是一个重要的指标。
- Accuracy = (TP + TN)/(TP + FP + TN + FN)
2、过拟合问题**(背诵)回答需要详细答具体操作**
- 过拟合现象:模型过于复杂,使得训练后在训练集上表现良好、但在测试集上表现很差的现象
- 防止过拟合的方法
- 训练/验证集划分/交叉验证:将数据集划分成训练集和测试集,在训练集上训练参数,验证集上验证模型性能,当模型在验证集上开始变差时停止训练,防止过拟合。交叉验证:将数据划分为K个子集,每次选一个子集作为验证集,其他用作测试集训练。依次用不同的子集 做验证集,重复训练k次。最终取k次验证结果均值做评估指标
- 扩大数据集/数据增强:获取更多的训练数据,对原始数据进行平移、旋转、缩放等。对数据进行特征增强处理等。
- 权重正则化:损失函数中添加一个额外的项,这个项会惩罚模型的权重,目的是限制模型的复杂性。有L1正则化,损失函数中添加权重向量的L1范数,促使部分权重变为零,从而实现稀疏性,剔除不重要的特征。L2正则化:损失函数中添加权重向量的L2范数,通过平方惩罚项阻止权重过大,减少对特定数据的过度拟合。(偏向分散权值)
- 随机失活Dropout:以一定概率使隐藏层神经元不被激活,使得网络的训练相当于对不同的神经网络取平均、还能减少神经元之间复杂的共适应关系。
3、梯度消失和梯度爆炸问题
- 解决梯度爆炸问题:最常用的方法是梯度裁剪(梯度截断),即设置一个梯度阈值,当梯度的范数超过这个阈值时,对梯度进行缩放,确保它不会超过这个阈值。这有助于减少梯度爆炸对模型参数的影响。
- 网络优化方法:
- 残差神经网络连接方式:引入残差结构,实现跨层连接,可以保证正向和反向信息正常流通。正向计算结果至少为前一层的x,局部梯度至少存在一个1。
- 采样非饱和的激活函数Relu或Leakly Relu:Relu的正半区内梯度为1,没有饱和区。Leakly Relu在负半区也引入了一个小梯度(0.01),优化了Relu的死区,不过其在0处没有导数。
- 好的参数初始化方式:
- 初始化方法有:全零/全一、随机初始化、Xavier初始化、He初始化、Pre-train初始化(迁移学习)
- 采用sigmoid激活函数可以使用Xavier初始化方法,Relu激活函数用He初始化方法,这种情况下各层的激活值和局部梯度方差在传播过程中基本一致,可以比较好的促使正向反向数据流动。
- 采用批量规范化(Batch Normalization):对每一层的输入进行标准化,使得每一个神经元的输入具有相对较小的变化范围,从而提高训练速度和模型性能。
- 作用:防止梯度消失、解决内部协变量偏移问题提高学习速率、减少对好的权值初始化依赖、有助于解决过拟合。
- 更快的优化器:动量梯度下降法、RMSProp优化器(自适应梯度下降)、Adam优化器。
- 动量梯度下降法:减少山壁间震荡现象、加强平坦区,跳出局部最优,加速训练。
- RMSProp优化器:自适应调整步长,减小震荡方向步长,增大平坦区步长。
- Adam优化器:结合了动量法和自适应法的优点。在很多类型神经网络中表现良好。
- LSTM:
- LSTM结构包括:输入门、遗忘门、输出门。
- LSTM通过控制信息的流动和记忆的保留,有助于避免梯度消失问题。遗忘门选择性地忘记先前不重要的信息,输入门和输出门允许网络有选择性地更新和输出信息,这有助于有效地捕捉长期依赖关系而减少梯度消失。
- 防止梯度消失:采样残差模块、采样非饱和激活函数、好的参数初始化方法、批归一化、LSTM门控结构
4、其他优化策略:(不考察)
-
各种准确率
- 贝叶斯极限(最优):指随着数据量增加,模型的准确率趋向的理论上限。这个极限通常是由数据的内在特性所决定的,是模型在无限数据情况下可以达到的最佳性能。
- 人类识别准确率:人类在特定任务上的识别准确率。在很多情况下,人类的识别准确率被认为是一个高水平的标杆,特别是在视觉和语言任务中。
- 训练准确率:模型在训练数据上的准确率。这个准确率可能非常高,因为模型在训练过程中是针对这些数据进行了优化。
- 验证准确率:模型在验证集上的准确率。这个准确率用于调整模型的超参数或验证模型在未见过的数据上的泛化能力。
- 测试准确率:模型在测试集上的准确率。这个准确率评估了模型在真实数据上的性能,是对模型泛化能力的最终评估。
-
降低训练误差:
- 更复杂的模型
- 更长时间的训练和优化
- 更优的超参数
-
降低验证/测试误差
- 更多更全面的数据
- 解决过拟合的策略
- 简化的模型结构/参数组合
五、迁移学习
1、迁移学习(重点:概念、为什么用迁移学习、什么情况下用)迁移学习_哔哩哔哩_bilibili
- 概念:迁移学习是一种机器学习方法,就是把为任务A开发的模型作为初始点,重新使用在为任务B开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务。
- 为什么用迁移学习?
- 大数据与少标注的矛盾:虽然有大量的数据,但往往都是没有标注的。无法训练机器学习模型。人工减小数据标定太耗时。
- 大数据与弱计算的矛盾:普通人无法拥有庞大的数据量与计算资源。因此需要借助于模型的迁移。
- 普适化模型于个性化需求的矛盾:即使是在同一个任务上,一个模型也往往难以满足每个人的个性化需求,比如特定的隐私设置。这就需要在不同人之间做模型的适配。
-
迁移学习的常用概念
- 域(Domain):数据特征和特征分布组成,是学习的主体
- 源域(Source domain):已有知识的域
- 目标域(Target domain):要进行学习的域
- 任务(Task):由目标函数和学习结果组成,是学习的结果
-
什么时候我们要用到迁移学习?
- 数据量很大但是标注样本很少或者数据量很小
- 传统机器学习:增加人工标注,但是昂贵且耗时
- 迁移学习:数据的迁移学习
- 大数据与弱计算的矛盾
- 传统机器学习:只依赖强大计算能力,但是受众少
- 迁移学习:模型迁移
- 普适化模型与个性化需求
- 传统机器学习:通过模型无法满足个性化需求
- 迁移学习:模型自适应调整
- 特定应用
- 冷启动问题无法解决
- 数据迁移
- 数据量很大但是标注样本很少或者数据量很小
-
什么时候不可以使用迁移学习?
- 当源域和目标域完全不相关的时候,强制进行迁移学习不仅不会给目标域的模型带来提升,同时反而会损害目标域的模型的性能,产生负迁移问题。
-
产生负迁移的原因有两种:
- 数据问题:源域与目标域根本不相似,无法迁移,比如我们把风控模型迁移到自动化驾驶问题上,显然是不合理的。
- 方法问题:源域和目标域存在相似性,但是迁移学习方法不够好,没有找到可以迁移的成分。
-
迁移学习的三种方法:
- 特征提取:只训练分类器
- 将预训练模型作为特征提取器,将其前面的层视为特征提取部分,然后在新任务上添加一个新的分类器
- 全网络微调Fine - tuning
- 将预训练模型加载到新任务中,然后在新任务的数据上继续训练模型在训练的过程中,可以固定一部分层的参数,只更新部分层的参数
- 两者相结合
- 特征提取:只训练分类器
五、分割和检测任务
1、语义分割、实例分割的概念(重点理解差异)语义分割哔哩哔哩_bilibili
-
分割任务:分割任务就是在原始图像中逐像素的找到你需要的目标。
-
语义分割:就是把每个像素都打上标签(这个像素点是人,树,背景等)(语义分割只区分类别,不区分类别中的具体单位)
-
实例分割:实例分割不光要区分类别,还要区分类别中每一个个体。
2、损失函数设计(重点)
- 逐像素的交叉熵:衡量每个像素分类准确性,量化模型在不同类别上的表现
- 考虑样本的均衡问题:不同类别像素分布可能不均衡。可以采用加权损失函数平衡各类别的影响。
- 样本难易问题:不同像素对模型训练难易程度不同,某些像素可能属于模糊区域、边界、噪声等,损失函数设计可能需要更多的加权处理。
3、IOU的计算(会算)
- IOU交并比:二者的交集比上二者的并集,计算例子如图:
4、语义分割之U-Net
- Unet网络综述:(了解)
- 提出的初衷:为了解决医学图像分割问题
- CNN是图像级的分类,Unet是像素级的分类,输出是每一个像素点的类别。
- Unet网络结构简单,前半部分就是特征提取后半部分是上采样,叫做编码器-解码器结构
- 编码器部分:图像—>高级语义feature map 解码器部分: 高级语义—>像素级分类score map
- Encoder:左半部分,由两个3 * 3卷积层RELU,再加上一个2 * 2 的maxpooling层组成的下采样
- Decoder:右半部分,由一个上采样卷积层(反卷积),特征拼接concat,两个3 * 3卷积层,非线性ReLu层
- Unet相比更早提出的FCN网络,使用拼接来作为特征图的融合方式
- FCN是通过特征图对像素值的相加来融合特征的
- Unet通过通道数的拼接,这样可以形成更厚的特征,当然这样会更加消耗显存。
- Unet++网络:(重点)
- 整体网络结构:
- 特征融合,拼接更全面:不同深度特征图进行交互融合,有助于提取不同层次语义信息。
- 其实跟Densenet思想一致:Unet++特征传递是密集的,低级别的特征图通过更深的路径与高级别特征图连接在一起,有利于减少信息损失。
- 把能拼能凑的特征全用上就是升级版。增强了模型对于各种特征图的感知和表达能力。
- Deep Supervision(多监督机制):在神经网络的多个层级引入监督信号,以便从网络中间层和最终输出层获得多个损失信号,并用这些信号来计算网络的总体损失。
- 优点:加速梯度传播,帮助网络更快的学习特征,由助于缓解梯度消失问题 ,促进网络训练和收敛。
- 特点:损失由多个位置计算,再更新。(这种损失通常被组合或加权,然后作为总体损失来更新整个网络的参数)
- 现在看来,很多视觉任务都可以套用此方法
- Unet++的优点:容易剪枝
- 有多个单独的监督训练
- 可以根据速度要求来快速完成剪枝
- 训练的时候同样会用到L4,效果还不错
- 整体网络结构:
- Unet+++(不考)
- 不同的max pool整合低阶特征(x1和x2,轮廓之类)
- 上采样整合高阶特征(感受野大的,全局的)
- 各层统一用卷积得到64各特征图
- 5*64=320,最终得到全部特征
5、Deeplab系列
- 如何增大感受野?
- 传统做法:旋转pooling操作,但是也会丢失一部分信息。
- 空洞卷积:在标准的卷积特征图里注入空洞,以此来增加感受野。
- 什么是空洞卷积:通过在卷积核的内部插入额外的间隔来实现的,这些间隔由零值填充。这样一来,卷积核内部的跨度增加了,使得感受野变大。这样可以捕获更大范围的空间信息,同时保持相对较少的参数量和计算量。(理解)
- 空洞卷积的优势:(重点)
- 图像分割任务中需要较大的感受野,空洞卷积可以获得更大的感受野
- 通过设置dilation rate设计空洞卷积核,且没有额外计算量
- 可以按照参数扩大任意倍的感受野,而且没有引入额外参数
- 应用简单,就是卷积核中多设置了一个参数就可以了
- 堆叠小卷积核作用:(前面提过)
- 获取同样感受野相对大卷积核参数更少
- 加深网络,更强的非线性,有利于更高级的语义的学习
6、SPP-Layer(空间金字塔池化层)(重点)
- SPP的基本情况:
- 在一般的CNN结构中,在卷积层后通常连接着全连接。而全连接的特征数是固定的,所有在网络输入的时候,会固定输入的大小。通常的手段就是裁剪(crop)和拉伸(warp)
- 但是,裁剪和拉伸后,图像的横纵比和输入图的尺寸是改变的,这样就会扭曲原始图像,一定程度上导致图片信息的丢失和变形。
- SPP方法是在不同尺寸的图片输入后,经过conv layer之后肯定尺寸也是不同的,再通过SPP层将它们固定到相同的尺寸,然后进入接下来的步骤
- 为什么引入SPP?(重点)
- 全连接层限制了特征输入的大小,直接裁剪会损失原图中的信息,SPP层允许卷积层之后处理不同尺寸的特征图,在不损失关键信息的情况下,使网络能够处理任意尺寸输入。其优势在于能够保留更多原始特征图的特征信息,提高模型性能和泛化能力。
- SPP具体做法:(重点)
- 特征提取层:在经过卷积神经网络的卷积层之后,获得各个尺寸的特征图。
- 金字塔池化:对每个特征图应用金字塔池化。金字塔池化的关键在于使用不同大小的池化核对同一尺寸特征图进行不同池化操作。最终得到固定输出(16 * 256-d、4 * 256-d、256-d)。
- 合并特征:将不同尺寸的池化特征图合并到一起,形成一个固定大小的特征向量。
- SPP层的特点:(重点)
- 不管输入尺寸是怎样,SPP可以产生固定大小的输入
- 使用多个窗口(pooling window)
- SPP可以使用同一图像的不同尺寸(scale)作为输入,得到同样长度的池化特征。
- 由于对输入图像的不同横纵比和不同尺寸,SPP同样可以处理,所以提高了图像的尺寸不变和降低了过拟合。
- 实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛
- SPP对于特征的CNN网络设计和结构是独立的(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的,它只是替换了原来的pooling层)
- 不仅可以用于图像分类而且可以用来目标检测。
- ASPP(了解)
- 其实就是跟SPP差不多,只不过引入了不同倍率的空洞卷积
- 通过设置dilation rate参数来完成空洞卷积,并没有额外计算
- 可以按照参数扩大任意倍数的感受野,而且没有引入额外的参数
- 应用简单,就是卷积层中多设置一个参数就可以了
7、Deeplabv3+(了解)
- 整体网络架构:效果提升不算多
- Backbone可以改进
- 创新不多所以不是第四版
六、目标检测
1、深度学习经典检测方法(能区分单阶段和两阶段)目标检测哔哩哔哩_bilibili
- Two-stage(两阶段):这种方法通常包括两个阶段。在第一阶段,模型会提出候选区域(通常称为区域提议),然后在第二阶段对这些提议区域进行分类和边界框回归。
- 例子:R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN
- 优缺点:速度通常慢(5FPS),但是效果通常还是不错。
- One-stage(单阶段):这种方法直接对整个图像进行处理,无需先生成候选区域。单阶段方法能够在单个网络中完成物体检测任务,以更快的速度实现目标检测。
- 例子:YOLO、SSD
- 优缺点:速度非常快,适合实时检测任务!缺点是效果通常不会太好!
2、衡量指标**(IOU的计算、Pre和Recall的计算)**
-
map指标:综合衡量检测效果,map 结合了 Precision-Recall 曲线下的面积(AUC),通过计算每个类别的 AP(Average Precision,平均精度)并求取其平均值得到。
-
IOU的计算
- IOU = Area of Overlap / Area of Union
-
Precesion = TP / (TP + FP)
-
Recall = TP / (TP + FN)
-
指标分析
- 精度Pre:指检测目标中真正属于该类别的比例。
- 召回率Rec:正确识别的比例占整理正例的比例。召回率越高,表示模型对某一类别的检测能力越强,漏检的可能性较小。
-
AP的计算
3、YOLOv1(了解思想就行)
-
基本特点
- 经典的one-stage方法
- You Only Look Once,名字就决定了一切
- 把检测问题转化为回归问题,一个CNN就搞定了!可以对视频进行实时检测,应用领域非常广!
-
核心思想:
- YOLOv1的核心思想就是利于整张图片作为网络的输入,直接在输出层回归bounding box位置和bounding box所属类别。
- 过程:
- 将一幅图像分成s * s个网格(grid cell),如果某个object的中心落在这个网格中,则这个网络就负责预测这个object
- 每个网格要预测B个bounding box,每个bounding box要预测(x,y,w,h)和confidence共5个值
- 每个网格还要预测一个类别信息,记为C个类别
- 总的来说,S * S 个网格,每个网格要预测B个bounding box,还要预测C个类。网络输出就是一个S * S * ( 5 * B + C)的张量
-
非极大值抑制:用来处理检测器输出的多个边界框(bounding boxes)的工具
- YOLOv1一次性生成多个边界框,并且可能会出现多个框对同一个目标的重叠检测。非极大值抑制的任务是在这些框中消除多余的检测结果,只保留最准确的边界框。它的工作原理是:
- 置信度筛选:根据预测框的置信度对所有检测结果进行排序,将得分最高的边界框保留。
- 重叠区域抑制:对于剩余的边界框,检查它们与置信度最高的边界框之间的重叠程度。如果两个框的 IoU大于预先设定的阈值,则将该框删除,因为它们重叠度高,代表检测到同一个目标。
- YOLOv1一次性生成多个边界框,并且可能会出现多个框对同一个目标的重叠检测。非极大值抑制的任务是在这些框中消除多余的检测结果,只保留最准确的边界框。它的工作原理是:
-
YOLO-v1优点和问题
- 优点:快速、简单
- 问题一:每个cell只预测一个类别,如果重叠无法解决
- 问题二:小物体检测效果一般,长宽比可选但单一
-
YOLO-v2:
- 更快、更强
- V2版本舍弃了Dropout,卷积后全部加入Batch Normalization
- 网络的每一层的输入都做了归一化,收敛更快
- 经过Batch Normalization处理后的网络会提升2%的map
- 从现在的角度来看,Batch Normalization已经成网络必备处理
-
还有YOLO V3、4、5、6、7、8
七、循环神经网络
1.传统循环神经网络RNN【循环神经网络】哔哩哔哩_bilibili
- 产生背景:BP神经网络和卷积神经网路,这两种结构有一个特点,就是假设输入(问题)是一个独立的没有上下文联系的单位,比如输入(问题)是一张图片,网络识别是狗还是猫,但是对于一些有明显的上下文特征的序列化输入(问题),比如预测视频中下一帧的播放内容,那么很明显这样的输出必须依赖以前的输入(问题),也就是说网络必须拥有一定的”记忆能力“为了赋予网络这样的记忆力,一种特殊结构的神经网络–循环神经网络便应运而生了。
- 为什么有了BP神经网络、CNN,还需要RNN
- BP神经网络和CNN的输入(问题)输出都是相互独立的;但是实际应用中有些场景输出内容和之前的内容是有关联的。。
- RNN引入”记忆“的概念;循环神经网络指其每一个元素执行相同的任务,但是输出依赖于输入(问题)和”记忆“
- 适用场景
- 自然语言处理(NLP)
- 机器翻译
- 语言识别
- 图像描述生成
- 文本相似度计算等
- RNN存在的问题
- RNN基本操作是,在传递过程中不断做乘法,连续乘一个小于1的数字,导致该数趋于0,反之,趋近于无穷大。
- 如果反向传播超过10个时间步长,梯度会变得非常小。现象称为梯度消失问题。同样可能也会遇到相反的问题,称为梯度爆炸。
- RNN问题的解决方案
- 梯度消失:LSTM和GRU模型相继推出,为什么它们可以克服梯度消失问题?
- 由于它们都有特殊的方式存储”记忆“,可以一定程度上克服梯度消失问题。
- 原理:在普通RNN中于长序列而言,很早之前时刻输入的信息,对于当前时刻是不会产生影响的
- 梯度爆炸:可以使用梯度裁剪,也就是当你计算的梯度超过阈值C或小于-C的时候,便把梯度设置成C或-C
- 梯度消失:LSTM和GRU模型相继推出,为什么它们可以克服梯度消失问题?
- 双向RNN
- 双向RNN包含两个RNN,一个从左往右,一个从右往左,两个RNN的参数是独立的。最后把两个RNN的输出拼接起来作为整体输出。对于包含完整序列的NLP问题,双向RNN应该是默认选择,它通常比单2向RNN效果更好。
2、LSTM(各种门的作用、如何缓解梯度消失的、核心思想)【LSTM长短期记忆网络】哔哩哔哩_bilibili
- 基本概念:LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN)变体,旨在克服普通RNN中的梯度消失和梯度爆炸问题,并能够更好地处理长期依赖。
- 组成结构:由记忆单元(cell)组成,记忆单元由一些列的gate组成,主要包括:遗忘门、输入门、输出门。LSTM的关键是:Ct“细胞状态” – 长时记忆
- 第一个门:遗忘门:
- 作用:决定从”细胞状态“中丢弃什么信息,比如在语言模型中,细胞状态可能包含了性别信息(”他“或者”她“),当我们看到新的代名词的时候,可以考虑忘记旧的数据。
- 第二个门:输入门:
- 作用:决定放什么信息到”细胞状态“中,做数据加强。
- 分成两部分:
- 第一部分:
- it(忽略因子)决定哪些部分删除Sigmoid层决定什么值需要去除和更新;
- tanh层创建一个新的信息向量Ct(取值为1或-1,表示正加强或负加强)
- 最后:it * Ct构成学习门
- 第二部分:经过前面的操作之后,可以确定传递信息的删除和增加,即可以进行“细胞状态”的更新。
- 更新C>t-1为Ct;
- 将旧状态于ft相乘,丢失掉确定不要的信息;
- 加上新的候选值it * Ct得到最终更新后的“细胞状态”
- 第一部分:
- 第三个门:输出门:
- 作用:基于当前的记忆单元状态和输入,决定产生多少新的输出。
- 工作过程:
- 首先运行一个sigmoid层来确定细胞状态的哪个部分将输出;
- 使用tanh处理细胞状态得到一个-1到1之间的值,再将它和sigmoid门的输出相乘,输出程序确定输出的部分。
- 第一个门:遗忘门:
- LSTM work原因:
- LSTM希望用Ct来传递很久以前的信息,来达到长距离依赖的目的。LSTM的隐层神经元不仅包含隐状态ht-1和记忆Ct-1,输出是当前时刻的隐状态ht和希望传递给下一时刻的记忆Ct
- LSTM解决梯度消失和爆炸问题
- 首先三个门的激活函数是sigmoid,这也就意味着这三个门的输出要么接近0要么接近1
- 当门为1时,梯度能够很好的在LSTM中传递,很大程度上减轻了梯度消失发生的概率;
- 当门为0时,说明上一时刻的信息对当前时刻没有影响,我们也就没有必要传递梯度回去来更新参数。所以,这就是为什么通过门控机制就能够解决梯度问题:使得单元之间传递的梯度为0或1.
3、循环神经网络变种
- 变种1:
- 增加“peephole connections”层(核心:为什么只有短时记忆可以决定门的控制,不合理,所以加入了长时记忆有参数门的开关控制)
- 让门层也接收细胞状态的输入(问题)
- 变种2:
- 通过耦合遗忘门和更新学习门(第一个门和第二个门);也就是不再单独的考虑忘记什么、增加什么信息,而是一起进行考虑。
- 变种GRU 2014年提出(了解)
- 更新门的合并:将遗忘门和输出门合并成为一个单一的更新门
- 状态的整合:同时合并了数据单元状态和隐藏状态(细胞状态和输出状态)
- 简化结构:结构比LSTM的结构更加简单,它减少了门控的数量,参数更少。
相关文章:

深度学习(学习记录)
题型:填空题判断题30分、简答题20分、计算题20分、综合题(30分) 综合题(解决实际工程问题,不考实验、不考代码、考思想) 一、深度学习绪论(非重点不做考察) 1、传统机器学习&…...

html5实现好看的个人博客模板源码
文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…...

SpringSecurity深度学习
SpringSecurity简介 spring Security是什么? Spring Security 是一个强大且高度可定制的身份验证和访问控制框架,用于保护基于Spring的应用程序。它是Spring项目的一部分,旨在为企业级系统提供全面的安全性解决方案。 一个简单的授权和校验…...

odoo17 | 用户界面的基本交互
前言 现在我们已经创建了我们的新模型及其 相应的访问权限,是时候了 与用户界面交互。 在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。 数据文件 (XML) Odoo在很大程度上是数据驱动的,因此模块定义的…...
Intel 性能监视器之二
全文来自Intel开发者手册:Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming Guide.pdf 注意:下文中已经指出手册中的对应页面和章节,请对照手册原文看,任何个人理解错误ÿ…...

Vert.x学习笔记-什么是事件总线
广义事件总线介绍Vert.x的事件总线Vert.x的事件总线的实现方式Vert.x的事件总线通信模式事件总线与消息队列的区别点对点通信模式请求-应答通信模式发布-订阅通信模式 Vert.x的事件总线应用场景Vert.x的事件总线消息Vert.x的事件总线消息示例Vert.x的事件总线的消息类型 拓展 广…...

STM32学习笔记二十二:WS2812制作像素游戏屏-飞行射击游戏(12)总结
至此,飞行射击游戏已经基本实现该有的功能,已经比较接近早期的商业游戏了。 如果采用脚本,可以完成关卡游戏,如果不用,也可以做成无限挑战游戏。 我们汇总一下制作的过程: 1、建模UML 2、主循环处理过程…...

astadmin安装querylist插件Puppeteer
我本来是想在linux服务器上安装,折腾了一天也没安装成功,由于急着用,就先做window10上安装了,以后有时间再研究centos7上安装 一 首先需要安装fastadmin 框架和querylist插件 这个大家可以自行安装,querylist安装地址…...

Python从入门到网络爬虫(MySQL链接)
前言 在实际数据分析和建模过程中,我们通常需要从数据库中读取数据,并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一,因此在 Python 中如何连接 MySQL 数据库并查询数据成为了一个重要的问题…...

2020年认证杯SPSSPRO杯数学建模A题(第二阶段)听音辨位全过程文档及程序
2020年认证杯SPSSPRO杯数学建模 A题 听音辨位 原题再现: 把若干 (⩾ 1) 支同样型号的麦克风固定安装在一个刚性的枝形架子上 (架子下面带万向轮,在平地上可以被水平推动或旋转,但不会歪斜),这样的设备称为一个麦克风树。不同的麦…...

深入理解CRON表达式:时间调度的艺术
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...

网络安全—模拟IP代理隐藏身份
文章目录 网络拓扑安装使用代理服务器设置隐藏者设置 使用古老的ccproxy实现代理服务器,仅做实验用途,禁止做违法犯罪的事情,后果自负。 网络拓扑 均使用Windows Server 2003系统 Router 外网IP:使用NAT模式 IP DHCP自动分配或者…...
Resilience4j相关问题及答案(2024)
1、什么是Resilience4j,与Hystrix有何不同? Resilience4j是一个为Java 8和函数式编程设计的故障恢复库,它主要利用了Vavr库中的函数式编程概念。Resilience4j提供了一系列的故障恢复机制,包括断路器(Circuit Breaker&…...

XSKY SDS 产品率先获得 OceanBase V4 新版本认证
近日,北京奥星贝斯科技有限公司(简称:OceanBase)与北京星辰天合科技股份有限公司(简称:XSKY 星辰天合)顺利完成产品兼容性认证。 XSKY 的高性能全闪存储以及混闪存储,与 OceanBase V…...
系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[基础知识]
分类目录:《系统学习Python》总目录 我们可以在类中定义两种方法,它们不需要一个实例就可以被调用:静态方法(staticmethod)大致与一个类中简单的无实例函数的工作方式类似,而类方法则被传人一个类而不是一个…...
kotlin isEmpty/isNotEmpty/isNullOrEmpty和isBlank/isNotBlank/isNullOrBlank
kotlin 中 isEmpty :如果判断的字符为空返回值返回true否则返回false 它的源码 kotlin.internal.InlineOnly public inline fun CharSequence.isEmpty(): Boolean length 0 length 0: 首先检查字符序列的长度是否为 0。如果长度为 0,则表明这个字…...

Qt/QML编程学习之心得:Linux下USB接口使用(25)
很多linux嵌入式系统都有USB接口,那么如何使用USB接口呢? 首先,linux的底层驱动要支持,在linux kernal目录下可以找到对应的dts文件,(device tree) usb0: usb@ee520000{compatible = "myusb,musb";status = "disabled";reg = <0xEE520000 0x100…...

概率论与数理统计 知识点+课后习题
文章目录 💖 [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)📚 总复习📙 选择题📙 填空题📙 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度函数 F ( X ) F(X) F(X)7. 分布列求方差 V ( X ) …...
Spring Boot实战:深入理解@Service与@Mapper注解
1. Service 注解 Service 是Spring框架提供的一个注解,用于标记类为业务逻辑层的组件。当类上标注了Service注解后,Spring容器会自动扫描并创建该类的一个实例(即Bean),这样我们就可以在其他地方通过自动装配…...

【DevOps-06】Jenkins实现CI/CD操作
一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...

实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...