深度学习常用损失函数介绍
均方差损失(Mean Square Error,MSE)
均方误差损失又称为二次损失、L2损失,常用于回归预测任务中。均方误差函数通过计算预测值和实际值之间距离(即误差)的平方来衡量模型优劣。即预测值和真实值越接近,两者的均方差就越小。
计算方式
假设有 n n n 个训练数据 x i x_i xi,每个训练数据 x i x_i xi 的真实输出为 y i y_i yi,模型对 x i x_i xi 的预测值为 y ^ i \hat{y}_i y^i。该模型在 n n n 个训练数据下所产生的均方误差损失可定义如下:
M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE=\frac{1}{n}\sum_{i=1}^n{\left( y_i-\hat{y}_i \right) ^2} MSE=n1i=1∑n(yi−y^i)2
假设真实目标值为100,预测值在-10000到10000之间,我们绘制MSE函数曲线如 图1 所示。可以看到,当预测值越接近100时,MSE损失值越小。MSE损失的范围为0到 ∞ \infty ∞ 。
图1 MSE损失示意图
CTC算法
算法背景
CTC 算法主要用来解决神经网络中标签和预测值无法对齐的情况,通常用于文字识别以及语音等序列学习领域。举例来说,在语音识别任务中,我们希望语音片段可以与对应的文本内容一一对应,这样才能方便我们后续的模型训练。但是对齐音频与文本是一件很困难的事,如 图2 所示,每个人的语速都不同,有人说话快,有人说话慢,我们很难按照时序信息将语音序列切分成一个个的字符片段。而手动对齐音频与字符又是一件非常耗时耗力的任务。
图2 语音识别任务中音频与文本无法对齐
在文本识别领域,由于字符间隔、图像变形等问题,相同的字符也会得到不同的预测结果,所以同样会会遇到标签和预测值无法对齐的情况。如 图3 所示。
图3 不同表现形式的相同字符示意图
总结来说,假设我们有个输入(如字幅图片或音频信号) X X X ,对应的输出是 Y Y Y ,在序列学习领域,通常会碰到如下难点:
- X X X 和 Y Y Y 都是变长的;
- X X X 和 Y Y Y 的长度比也是变化的;
- X X X 和 Y Y Y 相应的元素之间无法严格对齐。
算法概述
引入CTC主要就是要解决上述问题。这里以文本识别算法CRNN为例,分析CTC的计算方式及作用。CRNN中,整体流程如 图4 所示。
图4 CRNN整体流程
CRNN中,首先使用CNN提取图片特征,特征图的维度为 m × T m\times T m×T ,特征图 x x x 可以定义为:
x = ( x 1 , x 2 , . . . , x T ) x = (x^1,x^2,...,x^T) x=(x1,x2,...,xT)
然后,将特征图的每一列作为一个时间片送入LSTM中。令 t t t 为代表时间维度的值,且满足 1 < t < T 1<t<T 1<t<T ,则每个时间片可以表示为:
x t = ( x 1 t , x 2 t , . . . , x m t ) x^t = (x_1^t,x_2^t,...,x_m^t) xt=(x1t,x2t,...,xmt)
经过LSTM的计算后,使用softmax获取概率矩阵 y y y ,定义为:
y = ( y 1 , y 2 , . . . , y T ) y = (y^1,y^2,...,y^T) y=(y1,y2,...,yT)
其中,矩阵的每一列 y t y^t yt 定义为:
y t = ( y 1 t , y 2 t , . . . , y n t ) y^t = (y_1^t,y_2^t,...,y_n^t) yt=(y1t,y2t,...,ynt)
n n n 为字符字典的长度,由于 y i t y_i^t yit 是概率,所以 Σ i y i t = 1 \Sigma_i{y_i^t}=1 Σiyit=1 。对每一列 y t y^t yt 求 a r g m a x ( ) argmax() argmax() ,就可以获取每个类别的概率。
考虑到文本区域中字符之间存在间隔,也就是有的位置是没有字符的,所以这里定义分隔符 − - − 来表示当前列的对应位置在图像中没有出现字符。用 L L L 代表原始的字符字典,则此时新的字符字典 L ′ L' L′ 为:
L ′ = L ∪ { − } L' = L \cup \{-\} L′=L∪{−}
此时,就回到了我们上文提到的问题上了,由于字符间隔、图像变形等问题,相同的字符可能会得到不同的预测结果。在CTC算法中,定义了 B B B 变换来解决这个问题。 B B B 变换简单来说就是将模型的预测结果去掉分割符以及重复字符(如果同个字符连续出现,则表示只有1个字符,如果中间有分割符,则表示该字符出现多次),使得不同表现形式的相同字符得到统一的结果。如 图5 所示。
图5 CTC示意图
这里举几个简单的例子便于理解,这里令T为10:
B ( − s − t − a a t t e ) = s t a t e B(-s-t-aatte)=state B(−s−t−aatte)=state
B ( s s − t − a − t − e ) = s t a t e B(ss-t-a-t-e)=state B(ss−t−a−t−e)=state
B ( s s t t − a a t − e ) = s t a t e B(sstt-aat-e)=state B(sstt−aat−e)=state
对于字符中间有分隔符的重复字符则不进行合并:
B ( − s − t − t a t t e ) = s t t a t e B(-s-t-tatte)=sttate B(−s−t−tatte)=sttate
当获得LSTM输出后,进行 B B B 变换就可以得到最终结果。由于 B B B 变换并不是一对一的映射,例如上边的3个不同的字符都可以变换为state,所以在LSTM的输入为 x x x 的前提下,CTC的输出为 l l l 的概率应该为:
p ( l ∣ x ) = Σ π ∈ B − 1 ( l ) p ( π ∣ x ) p(l|x) = \Sigma_{\pi\in B^{-1}(l)}p(\pi|x) p(l∣x)=Σπ∈B−1(l)p(π∣x)
其中, π \pi π 为LSTM的输出向量, π ∈ B − 1 ( l ) \pi\in B^{-1}(l) π∈B−1(l) 代表所有能通过 B B B 变换得到 l l l 的 π \pi π 的集合。
而对于任意一个 π \pi π ,又有:
p ( π ∣ x ) = Π t = 1 T y π t t p(\pi|x) = \Pi_{t=1}^Ty^t_{\pi_t} p(π∣x)=Πt=1Tyπtt
其中, y π t t y^t_{\pi_t} yπtt 代表 t t t 时刻 π \pi π 为对应值的概率,这里举一个例子进行说明:
π = − s − t − a a t t e \pi = -s-t-aatte π=−s−t−aatte
y π t t = y − 1 ∗ y s 2 ∗ y − 3 ∗ y t 4 ∗ y − 5 ∗ y a 6 ∗ y a 7 ∗ y t 8 ∗ y t 9 ∗ y e 1 0 y^t_{\pi_t} = y_-^1*y_s^2*y_-^3*y_t^4*y_-^5*y_a^6*y_a^7*y_t^8*y_t^9*y_e^10 yπtt=y−1∗ys2∗y−3∗yt4∗y−5∗ya6∗ya7∗yt8∗yt9∗ye10
不难理解,使用CTC进行模型训练,本质上就是希望调整参数,使得 p ( π ∣ x ) p(\pi|x) p(π∣x) 取最大。
交叉熵损失函数
在物理学中,“熵”被用来表示热力学系统所呈现的无序程度。香农将这一概念引入信息论领域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。
交叉熵(cross entropy)是信息论中的重要概念,主要用来度量两个概率分布间的差异。假定 p p p 和 q q q 是数据 x x x 的两个概率分布,通过 q q q 来表示 p p p 的交叉熵可如下计算:
H ( p , q ) = − ∑ x p ( x ) log q ( x ) H\left( p,q \right) =-\sum_x{p\left( x \right) \log q\left( x \right)} H(p,q)=−x∑p(x)logq(x)
交叉熵刻画了两个概率分布之间的距离,旨在描绘通过概率分布 q q q 来表达概率分布 p p p 的困难程度。根据公式不难理解,交叉熵越小,两个概率分布 p p p 和 q q q 越接近。
这里仍然以三类分类问题为例,假设数据 x x x 属于类别 1 1 1。记数据x的类别分布概率为 y y y,显然 y = ( 1 , 0 , 0 ) y=(1,0,0) y=(1,0,0)代表数据 x x x 的实际类别分布概率。记 y ^ \hat{y} y^ 代表模型预测所得类别分布概率。
那么对于数据 x x x 而言,其实际类别分布概率 y y y 和模型预测类别分布概率 y ^ \hat{y} y^ 的交叉熵损失函数定义为:
c r o s s e n t r o p y = − y × log ( y ^ ) cross\ entropy=-y\times \log \left( \hat{y} \right) cross entropy=−y×log(y^)
很显然,一个良好的神经网络要尽量保证对于每一个输入数据,神经网络所预测类别分布概率与实际类别分布概率之间的差距越小越好,即交叉熵越小越好。于是,可将交叉熵作为损失函数来训练神经网络。
图6 三类分类问题中输入x的交叉熵损失示意图(x 属于第一类)
图6 给出了一个三个类别分类的例子。由于输入数据 x x x 属于类别 1 1 1,因此其实际类别概率分布值为 y = ( y 1 , y 2 , y 3 ) = ( 1 , 0 , 0 ) y=(y_1,y_2,y_3)=(1,0,0) y=(y1,y2,y3)=(1,0,0)。经过神经网络的变换,得到了输入数据 x x x 相对于三个类别的预测中间值 ( z 1 , z 2 , z 3 ) (z1,z2,z3) (z1,z2,z3)。然后,经过 S o f t m a x Softmax Softmax 函数映射,得到神经网络所预测的输入数据 x x x 的类别分布概率 y ^ = ( y ^ 1 , y ^ 2 , y ^ 3 ) \hat{y}=\left( \hat{y}_1,\hat{y}_2,\hat{y}_3 \right) y^=(y^1,y^2,y^3)。根据前面的介绍, y ^ 1 \hat{y}_1 y^1、 y ^ 2 \hat{y}_2 y^2 和 y ^ 3 \hat{y}_3 y^3 为 ( 0 , 1 ) (0,1) (0,1) 范围之间的一个概率值。由于样本 x x x 属于第一个类别,因此希望神经网络所预测得到的 y ^ 1 \hat{y}_1 y^1取值要远远大于 y ^ 2 \hat{y}_2 y^2 和 y ^ 3 \hat{y}_3 y^3 的取值。为了得到这样的神经网络,在训练中可利用如下交叉熵损失函数来对模型参数进行优化:
c r o s s e n t r o p y = − ( y 1 × log ( y ^ 1 ) + y 2 × log ( y ^ 2 ) + y 3 × log ( y ^ 3 ) ) cross\ entropy=-\left( y_1\times \log \left( \hat{y}_1 \right) +y_2\times \log \left( \hat{y}_2 \right) +y_3\times \log \left( \hat{y}_3 \right) \right) cross entropy=−(y1×log(y^1)+y2×log(y^2)+y3×log(y^3))
在上式中, y 2 y_2 y2 和 y 3 y_3 y3 均为 0 0 0、 y 1 y_1 y1 为 1 1 1,因此交叉熵损失函数简化为:
− y 1 × log ( y ^ 1 ) = − log ( y ^ 1 ) -y_1\times \log \left( \hat{y}_1 \right) =-\log \left( \hat{y}_1 \right) −y1×log(y^1)=−log(y^1)
在神经网络训练中,要将输入数据实际的类别概率分布与模型预测的类别概率分布之间的误差(即损失)从输出端向输入端传递,以便来优化模型参数。下面简单介绍根据交叉熵计算得到的误差从 y ^ 1 \hat{y}_1 y^1 传递给 z 1 z_1 z1 和 z 2 z_2 z2( z 3 z_3 z3 的推导与 z 2 z_2 z2 相同)的情况。
∂ y ^ 1 ∂ z 1 = ∂ ( e z 1 ∑ k e z k ) ∂ z 1 = ( e z 1 ) ′ × ∑ k e z k − e z 1 × e z 1 ( ∑ k e z k ) 2 = e z 1 ∑ k e z k − e z 1 ∑ k e z k × e z 1 ∑ k e z k = y ^ 1 ( 1 − y ^ 1 ) \frac{\partial \hat{y}_1}{\partial z_1}=\frac{\partial \left( \frac{e^{z_1}}{\sum_k{e^{z_k}}} \right)}{\partial z_1}=\frac{\left( e^{z_1} \right) ^{'}\times \sum_k{e^{z_k}-e^{z_1}\times e^{z_1}}}{\left( \sum_k{e^{z_k}} \right) ^2}=\frac{e^{z_1}}{\sum_k{e^{z_k}}}-\frac{e^{z_1}}{\sum_k{e^{z_k}}}\times \frac{e^{z_1}}{\sum_k{e^{z_k}}}=\hat{y}_1\left( 1-\hat{y}_1 \right) ∂z1∂y^1=∂z1∂(∑kezkez1)=(∑kezk)2(ez1)′×∑kezk−ez1×ez1=∑kezkez1−∑kezkez1×∑kezkez1=y^1(1−y^1)
由于交叉熵损失函数 − log ( y ^ 1 ) -\log \left( \hat{y}_1 \right) −log(y^1) 对 y ^ 1 \hat{y}_1 y^1 求导的结果为 − 1 y ^ 1 -\frac{1}{\hat{y}_1} −y^11, y ^ 1 ( 1 − y ^ 1 ) \hat{y}_1\left( 1-\hat{y}_1 \right) y^1(1−y^1) 与 − 1 y ^ 1 -\frac{1}{\hat{y}_1} −y^11 相乘为 y ^ 1 − 1 \hat{y}_1-1 y^1−1。这说明一旦得到模型预测输出 y ^ 1 \hat{y}_1 y^1,将该输出减去1就是交叉损失函数相对于 z 1 z_1 z1 的偏导结果。
∂ y ^ 1 ∂ z 2 = ∂ ( e z 1 ∑ k e z k ) ∂ z 2 = 0 × ∑ k e z k − e z 1 × e z 2 ( ∑ k e z k ) 2 = − e z 1 ∑ k e z k × e z 2 ∑ k e z k = − y ^ 1 y ^ 2 \frac{\partial \hat{y}_1}{\partial z_2}=\frac{\partial \left( \frac{e^{z_1}}{\sum_k{e^{z_k}}} \right)}{\partial z_2}=\frac{0\times \sum_k{e^{z_k}-e^{z_1}\times e^{z_2}}}{\left( \sum_k{e^{z_k}} \right) ^2}=-\frac{e^{z_1}}{\sum_k{e^{z_k}}}\times \frac{e^{z_2}}{\sum_k{e^{z_k}}}=-\hat{y}_1\hat{y}_2 ∂z2∂y^1=∂z2∂(∑kezkez1)=(∑kezk)20×∑kezk−ez1×ez2=−∑kezkez1×∑kezkez2=−y^1y^2
同理,交叉熵损失函数导数为 − 1 y ^ 1 -\frac{1}{\hat{y}_1} −y^11, − y ^ 1 y ^ 2 -\hat{y}_1\hat{y}_2 −y^1y^2 与 − 1 y ^ 1 -\frac{1}{\hat{y}_1} −y^11 相乘结果为 y ^ 2 \hat{y}_2 y^2。这意味对于除第一个输出节点以外的节点进行偏导,在得到模型预测输出后,只要将其保存,就是交叉损失函数相对于其他节点的偏导结果。在 z 1 z_1 z1、 z 2 z_2 z2 和 z 3 z_3 z3得到偏导结果后,再通过链式法则(后续介绍)将损失误差继续往输入端传递即可。
在上面的例子中,假设所预测中间值 ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1,z2,z3) 经过 S o f t m a x Softmax Softmax 映射后所得结果为 ( 0.34 , 0.46 , 0.20 ) (0.34,0.46,0.20) (0.34,0.46,0.20)。由于已知输入数据 x x x 属于第一类,显然这个输出不理想而需要对模型参数进行优化。如果选择交叉熵损失函数来优化模型,则 ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1,z2,z3) 这一层的偏导值为 ( 0.34 − 1 , 0.46 , 0.20 ) = ( − 0.66 , 0.46 , 0.20 ) (0.34-1,0.46,0.20)= (-0.66,0.46,0.20) (0.34−1,0.46,0.20)=(−0.66,0.46,0.20)。
可以看出, S o f t m a x Softmax Softmax 和交叉熵损失函数相互结合,为偏导计算带来了极大便利。偏导计算使得损失误差从输出端向输入端传递,来对模型参数进行优化。在这里,交叉熵与 S o f t m a x Softmax Softmax 函数结合在一起,因此也叫 S o f t m a x Softmax Softmax 损失(Softmax with cross-entropy loss)。
相关文章:
深度学习常用损失函数介绍
均方差损失(Mean Square Error,MSE) 均方误差损失又称为二次损失、L2损失,常用于回归预测任务中。均方误差函数通过计算预测值和实际值之间距离(即误差)的平方来衡量模型优劣。即预测值和真实值越接近&…...
PSHuman 部署笔记
目录 github地址: 依赖项: xformers安装: 解决方法,安装xformers smpl_data下载: 推理步骤: SMPLDataset 香港科技大学提出了一种叫PSHuman的新框架。这个方法利用了一个多视角扩散模型的“先验知识…...
怎么样能使Ubuntu的文件浏览器显示当前目录的路径,而不是只显示一个文件名?
默认情况下Ubuntu的文件浏览器是只显示当前目录的目录名的,这很不便我们查看路径或直接利用路径进行定位,那么怎么样能使Ubuntu的文件浏览器显示当前目录的路径呢? 两种方法: 第1种-临时方法 按下快捷键 Ctrl L,导航…...
自回归模型(AR )
最近看到一些模型使用了自回归方法,这里就学习一下整理一下相关内容方便以后查阅。 自回归模型(AR ) 自回归模型(AR )AR 模型的引入AR 模型的定义参数的估计方法模型阶数选择平稳性与因果性条件自相关与偏自相关函数优…...
工具推荐-js爬取工具
现在测试方向都偏向于从js中的接口来入手找到可以进的点,关于快速扫描js文件来发现敏感接口的工具有很多,下面的jjjjs就是其一 项目地址: GitHub - ttstormxx/jjjjjjjjjjjjjs: 爬网站JS文件,自动fuzz api接口,指定api接口&#x…...
CSS学习记录05
CSS外边距 CSS margin属性用于在任何定义的边框之外,为元素周围创建空间。通过CSS,您可以完全控制外边距,一些属性可用于设置元素每侧(上、右、下和左)的外边距。 Margin - 单独的边 CSS拥有用于为元素的每一侧指定…...
差异基因富集分析(R语言——GOKEGGGSEA)
接着上次的内容,上篇内容给大家分享了基因表达量怎么做分组差异分析,从而获得差异基因集,想了解的可以去看一下,这篇主要给大家分享一下得到显著差异基因集后怎么做一下通路富集。 1.准备差异基因集 我就直接把上次分享的拿到这…...
ISO 45001 职业健康安全管理体系的实施具有多方面的重要意义
对企业的意义 提升企业形象:实施 ISO 45001 体系体现了企业对员工职业健康安全的重视和承诺,有助于树立良好的企业形象,增强企业在社会公众、客户、投资者等方面的认可度和美誉度,提升企业的市场竞争力。增强员工满意度和忠诚度&a…...
HarmonyOS-中级(三)
文章目录 合理使用动画和转场Web组件和WebView给应用添加通知和提醒 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月08日12点12分 合理使用动画和转场 动效场景设计&#x…...
报错:Invalid HTTP method: PATCH executing PATCH http://XXX.XXX
分析: 问题在于我使用feignclietn调用PatchMapping方法时,发送的 PATCH 请求方法出现了不匹配的情况。虽然说springboot自带了RESTful风格的方法(GET、POST、PUT、DELETE、PATCH,但是PATCH相较于前几个来说算是新的HTTP方法&#…...
Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
感谢您点开这篇文章:D,鼠鼠我是一个代码小白,下文是学习开源项目Open WebUI过程中的一点笔记记录,希望能帮助到你~ 本人菜鸟,持续成长,能力不足有疏漏的地方欢迎一起探讨指正,比心心~…...
WPF Prism 01-BootstrapperShell
Prism介绍 Prism 是一个用于在 WPF、.NET MAUI、Uno 平台和 Xamarin Forms 中构建松耦合、可维护和可测试的 XAML 应用程序的框架。每个平台都有单独的发布版本,并且这些版本将在独立的开发时间线上进行开发。Prism 提供了一组设计模式的实现,这些模式有…...
在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)
在使用实体ESP32C3 安装鸿蒙失败后,就是这个:完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)-CSDN博客转向用qemu模拟环境装鸿蒙 学习手册riscv32_virt/README_zh.md OpenHar…...
第2章:CSS基本语法 --[CSS零基础入门]
CSS(层叠样式表,Cascading Style Sheets)是用来描述HTML或XML(包括各种XML:SVG, MathML 或 XHTML)等文档的外观和格式的语言。以下是CSS的基本语法: 1.选择器 1.元素选择器 元素选择器是基于HTML标签名称来选择元素的。当你使用元素选择器时,你是在告诉浏览器对页面…...
win11 恢复任务栏copilot图标, 亲测有效
1、修改C:\Windows\System32\IntegratedServicesRegionPolicySet.json,解除中国不能使用copilot的限制。 使用Notepad搜索copilot全文搜索,将下面两处的“CN,”删除,删除后如下: {"$comment": "Show Copilot on t…...
Python爬虫实战:抓取拼多多商品详情数据(基于pdd.item_get接口)
在当前的电商市场中,拼多多以其独特的拼团模式和优惠价格吸引了大量用户,成为继淘宝、京东之后的又一大电商平台。对于数据分析和市场研究者来说,获取拼多多的商品详情数据显得尤为重要。本文将介绍如何使用Python爬虫技术,通过调…...
如何在x86模拟器和鸿蒙API9如何使用MQTT模块ohos_mqtt
目录 引言 安装失败的原因 如何编译so文件的x86_64版本 下载源代码 安装NDK 代码编译 安装MQTT软件包 避免MQTT软件包自动升级 设置libs 客户端程序的编写 运行测试 结语 参考文献 引言 在上周的博客(如何在鸿蒙API9和x86模拟器中使用MQTT-CSDN博客&am…...
VB.NET 从入门到精通:开启编程进阶之路
摘要: 本文全面深入地阐述了 VB.NET 的学习路径,从基础的环境搭建与语法入门开始,逐步深入到面向对象编程、图形用户界面设计、数据访问、异常处理、多线程编程以及与其他技术的集成等核心领域,通过详细的代码示例与理论讲解&…...
芝法酱学习笔记(1.3)——SpringBoot+mybatis plus+atomikos实现多数据源事务
一、前言 1.1 业务需求 之前我们在讲解注册和登录的时候,有一个重要的技术点忽略了过去。那就是多数据源的事务问题。 按照我们的业务需求,monitor服务可能涉及同时对监控中心数据库和企业中心数据库进行操作,而我们希望这样的操作在一个事…...
图像处理插件:让小程序焕发视觉新生的秘密武器
在小程序开发中,图像处理是一个重要的环节,它涉及到图片的加载、显示、裁剪、压缩等多个方面。为了简化这一复杂过程,开发者通常会使用图像处理插件。这些插件不仅提供了丰富的图像处理功能,还封装了底层的图像操作逻辑࿰…...
力扣刷题TOP101: 27.BM34 判断是不是二叉搜索树
目录: 目的 思路 复杂度 记忆秘诀 python代码 目的: 给定一个二叉树根节点,请判断这棵树是不是二叉搜索树。 二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。 思路 什么是二叉搜索树&am…...
Linux图形化工具推荐
1、MobaXterm MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - DownloadFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Downloadhttps://mobaxterm.mobatek.net/download.html 2、FinalShell FinalShell SSH工具,服…...
蓝队基础:企业网络安全架构与防御策略
声明 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,此文章为对视频内容稍加整理发布,文章所提到的网站以及内容,只做学习交流,其他…...
数据结构:栈
什么是栈: 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。 栈…...
tcp_recvmsg 函数
tcp_recvmsg 函数是 Linux 内核 TCP 栈的一部分,它主要用于处理从 TCP socket 接收数据的过程。这个函数的主要任务是从 TCP 接收队列中提取数据,并将这些数据拷贝到用户空间提供的缓冲区中。 以下是 tcp_recvmsg 函数的一般工作流程和功能解释: 函数签名和参数 int tcp_re…...
《数据结构》(应用题)
历年真题(09~24) 2009 最短路径(Dijkstra青春版) 【2009统考真题】带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点…...
阿里内部正式开源“Spring Cloud Alibaba (全彩小册)”
年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个…...
LeetCode题练习与总结:根据字符出现频率排序--451
一、题目描述 给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。 返回 已排序的字符串 。如果有多个答案,返回其中任何一个。 示例 1: 输入: s "tree" 输出: "eert" …...
Excel VBA学习系列汇总20241205
整理几年工作中,实用VBA代码,绝对干货! 方便自己查询,方便大家学习, 有缘人可复制使用,记得分享给大家免费学习哦! 序历史文章1新学期开始,如何新学期开始,如何按成绩名次…...
给el-table表头添加icon图标,以及鼠标移入icon时显示el-tooltip提示内容
在你的代码中,你已经正确地使用了 el-tooltip 组件来实现鼠标划过加号时显示提示信息。el-tooltip 组件的 content 属性设置了提示信息的内容,placement 属性设置了提示信息的位置。 你需要确保 el-tooltip 组件的 content 属性和 placement 属性设置正…...
基于LLM智能问答系统【阿里云:天池比赛】
流程: 1、分别识别问题及提供的资料文件中的公司名实体,有公司名的走语义检索,无公司名的走结构化召回 2、结构化召回:Qwen根据问题生成sql,执行sql获取结果数值,把结果数值与问题给到Qwen生成最终结果 …...
k8s-Informer概要解析(2)
Client-go 主要用在 k8s 控制器中 什么是 k8s Informer Informer 负责与 kubernetes APIServer 进行 Watch 操作,Watch 的资源,可以是 kubernetes 内置资源对象,也可以 CRD。 Informer 是一个带有本地缓存以及索引机制的核心工具包&#x…...
Leetcode 3376. Minimum Time to Break Locks I
Leetcode 3376. Minimum Time to Break Locks I 1. 解题思路2. 代码实现 题目链接:3376. Minimum Time to Break Locks I 1. 解题思路 这一题我最开始的思路走的是贪婪算法的路子,优先走X的增长,不过很不幸失败了,后面还是暴力…...
介绍8款开源网络安全产品
01 HFish蜜罐 HFish是一款开源的蜜罐系统,用于模拟各种网络服务和应用,以吸引潜在的黑客攻击。它能够记录攻击尝试并收集攻击者的信息,从而帮助网络管理员识别潜在的威胁。HFish支持多种协议和服务,包括HTTP、FTP、SSH等&#…...
vue2面试题|[2024-12-5]
开题答辩终于结束了,又要开始我的前端面试学习啦!!! 1.v-model双向绑定原理 class Vue{constructor(options){this.$options optionsthis.$watchEvent {}if(typeof options.beforeCreate function){options.beforeCreate.bind…...
共筑数字安全防线,2024开源和软件安全沙龙即将启幕
随着数字化转型进程的加快以及开源代码的广泛应用,开源凭借平等、开放、协作、共享的优秀创作模式,逐渐成为推动数字技术创新、加速传统行业转型升级的重要模式。但随着软件供应链日趋复杂多元,使得其安全风险不断加剧,针对软件供…...
目标跟踪领域经典论文解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
SQL DQL数据查询语言(后续)
SQL DQL数据查询语言(后续) 1.子查询 在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句在返回列中嵌套一个查询 where条件中嵌套 要求:查询课程为《高等数学-2》且分数不小于80分的学生的学号和姓名select a.StudentNo,a…...
Gitee配置SSH公钥
采用SSH协议同步Git仓库代码的好处就是高效。在配置好SSH公钥后,不需要每次操作都要输入用户名和密码(主要针对命令行来说)。 以我个人项目为例。 生成 SSH 公钥 1. 通过命令 ssh-keygen 生成 SSH Key: ssh-keygen -t ed25519…...
机器学习——感知机模型
文章目录 前言1.感知机模型介绍1.1基本概念1.2数学表达1.3几何解释1.4优缺点 2.二分类应用2.1应用介绍2.2准备数据集2.2.1环境检查2.2.2数据集介绍2.2.3获取数据2.2.4划分数据集 2.3可视化训练集2.4训练过程2.4.1首轮梯度下降2.4.2多轮梯度下降 2.5可视化分类结果2.6在验证集验…...
如何选择安全、可验证的技术?
澳大利亚信号局的澳大利亚网络安全中心 (ASD 的 ACSC) 发布了一份指导文件,题为《选择安全和可验证的技术》,旨在帮助组织在采购软件(专有或开源)、硬件(例如物联网设备)和云服务(SaaS、MSP 服务…...
STL库中list的使用与迭代器的实现
STL库中list的使用与迭代器的实现 1.使用list中的部分函数assignspliceremoveuniquemeger 2.list的部分功能实现(重点)框架迭代器的实现 1.使用list中的部分函数 assign 功能一:当前链表的节点全部销毁,替换成迭代区间的值 功能二…...
android 常用三方框架
说实话, 我是比较讨厌三方框架的, 比如一个eventbus 底层逻辑就是个观察者模式,当然他的场景涵盖的比较丰富, 单从 单一原则来说, 还是一个简单的观察者模式就能解决问题, 何必要添加那么多文件到我们的项目…...
Browser.js断点续传上传
通过断点续传上传的方式将文件上传到OSS前,您可以指定断点记录点。上传过程中,如果出现网络异常或程序崩溃导致文件上传失败时,将从断点记录处继续上传未上传完成的部分。 attention: 1、 当您使用webpack或browserify等打包工具…...
Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,租房市场日益繁荣&a…...
了解Cocoa Touch框架与主要组件
Cocoa Touch框架详解及其主要组件 一、Cocoa Touch框架概述 Cocoa Touch框架是苹果公司为iOS应用程序开发提供的一套完整的框架,它基于Cocoa框架,并专为触控设备如iPhone、iPad等设计。这套框架不仅包含了构建图形用户界面(GUI)…...
ISO45001职业健康安全管理体系涵盖了丰富的内容
范围与术语 适用范围:明确规定了该标准适用于任何有愿望建立、实施和保持职业健康安全管理体系的组织,旨在使组织能够通过管理体系的有效运行,预防和控制职业健康安全风险,持续改进职业健康安全绩效。术语定义:对职业…...
Spring Boot 整合 Druid 并开启监控
文章目录 1. 引言2. 添加依赖3. 配置数据源4. 开启监控功能5. 自定义 Druid 配置(可选)6. 访问监控页面7. 注意事项8. 总结 Druid 是一个由阿里巴巴开源的高性能数据库连接池,它不仅提供了高效的连接管理功能,还自带了强大的监控和…...
【JAVA高级篇教学】第一篇:Springboot对接通义千问大模型
博主今天打算讲解下Java如何对接阿里云的通义千问大模型,可以自己玩玩ai问答之类的! 目录 一、发展历程 二、API-KEY的获取与配置 三、引用SDK 四、文本模型 1.代码 2.返回数据 3.官方代码案例 五、通义千问VL 1.计量计费 六、查看API-KEY调用额…...
【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】
卸载 MySQL 参考文章: 完美解决Mysql彻底删除并重装_怎么找到mysql并卸载-CSDN博客使用命令卸载mysql_卸载mysql服务命令-CSDN博客 先管理员方式打开 cmd ,切换到 MySQL 安装目录的 bin 文件夹下,执行如下命令,删除 MySQL 服务 my…...