深度学习基础知识总结

本文总结了深度学习的基础知识,包括非线性激活函数的作用,卷积的优势,池化层,padding的使用,以及迁移学习防止过拟合的策略。讨论了激活函数如sigmoid、tanh、ReLU及其优缺点,并介绍了优化方法,如SGD、Momentum、RMSprop、Adam等,以及学习率衰减。最后提到了模型评估中的mAP和精度召回率概念。
摘要由CSDN通过智能技术生成

深度学习基础知识总结

(不定时更新)

目录

基础问题

卷积中图像大小变化公式:

i m a g e s i z e = n × n × c , f i l t e r s = f × f × c ( c h a n n e l s ) × n u m b e r   o f   f i l t e r s , s ( s t r i d e ) = s , p ( p a d d i n g ) = p image size = n \times n \times c, filters = f \times f \times c(channels) \times number\ of\ filters, s(stride) = s, p(padding) = p imagesize=n×n×c,filters=f×f×c(channels)×number of filters,s(stride)=s,p(padding)=p

after conv we get ( n + 2 p − f s + 1 ) × ( n + 2 p − f s + 1 ) × c (\frac {n+2p-f} {s} + 1) \times (\frac {n+2p-f} {s} + 1) \times c (sn+2pf+1)×(sn+2pf+1)×c (The new c here equals to number of filters from last layer)

为什么需要非线性激活函数?

Why need a nonlinear activation function?

如果你使用线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层一直在做的只是计算线性函数。模型复杂度和标准的logistic回归是一样的。非线性激活函数是深层的神经网络变得有意义,可以使模型更复杂。

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。

为什么使用卷积?

Why convolutions?

和只使用全连接层相比,卷积层的两个主要优势在于参数共享稀疏连接。直接使用全连接层的话,需要的参数会非常多。

参数共享:观察发现,特征检测如垂直边缘检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。整张图片共享特征检测器。

稀疏连接:第二个方法是使用稀疏连接,我来解释下。绿色线圈着的这个0是通过3×3的卷积计算得到的,它只依赖于这个3×3的输入的单元格,右边这个输出单元(元素 0)仅与36个输入特征中9个相连接。而且其它像素值都不会对输出产生任影响,这就是稀疏连接的概念。
1
神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。

你们也可能听过,卷积神经网络善于捕捉平移不变。通过观察可以发现,向右移动两个像素,图片中的猫依然清晰可见,因为神经网络的卷积结构使得即使移动几个像素,这张图片依然具有非常相似的特征,应该属于同样的输出标记。实际上,我们用同一个过滤器生成各层中,图片的所有像素值,希望网络通过自动学习变得更加健壮,以便更好地取得所期望的平移不变属性。

池化层 Pooling layers

压缩特征图,提取主要特征。最大池化使用的过滤器2x2,步幅为2,表示层的高度和宽度会减少一半。

卷积网络经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。

一般使用最大池化,大部分情况下最大池化很少用padding。数字大意味着可能探测到了某些特定的特征。如果没有提取到这个特征,那么其中的最大值也还是很小 。具体的原因也不是太清楚,之所以使用池化是因为用了效果好。同时池化可以把很多数据用最大值或者平均值代替。目的是降低数据量。降低训练的参数。对于输入层,当其中像素在邻域发生微小位移时,池化层的输出是不变的,从而能提升鲁棒性。而卷积则是把数据通过一个卷积核变化成特征,便于后面的分离。

padding 填充

如果我们有一个 n × n n \times n n×n的图像,用 f × f f \times f f×f的过滤器做卷积,那么输出的维度就是 ( n − f + 1 ) × ( n − f + 1 ) (n-f+1) \times (n-f+1) (nf+1)×(nf+1)。这样,每次做卷积操作,你的图像会缩小,影响卷积网络的深度。那些在角落或者边缘区域的像素点在输出中采用较少,意味着你丢掉了图像边缘位置的许多信息。可以使用Valid卷积,p=0。也可以使用Same卷积填充像素,使输出和输入大小相同。

迁移学习

tf1
tf2
如果你有一个三分类问题,训练集很小。举个例子,可以使用ImageNet数据集,它有1000个不同的类别,因此这个网络会有一个Softmax单元,它可以输出1000个可能类别之一。你可以去掉这个Softmax层,创建你自己的Softmax单元,用来输出三个类别。把所有的层看作是冻结的,冻结网络中所有层的参数,只需训练和你的Softmax层有关的参数。
tf3
如果你有大量的数据,你应该冻结更少的层,训练后面的层。

防止过拟合有哪些方法

  • 获取更多的训练数据
  • 减小网络容量(简单的网络),但容易欠拟合
  • 添加权重正则化
  • 添加dropout

正则化(Regularization)

深度学习可能存在过拟合问题–高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据
r1
λ 2 m \lambda \over 2m 2mλ乘以 w w w范数的平方, w w w欧几里德范数的平方等于 w j w_j wj (? 值从 1 到 n x n_x nx)平方的和,也可表示为 w T w w^Tw wTw,也就是向量参数 w w w的欧几里德范数(2 范数)的平方,此方法称为?2正则化。因为这里用了欧几里德法线,被称为向量参数?的?2范数。 因为b只是众多参数中的一个,所以通常忽略。

?2正则化是最常见的正则化类型,你们可能听说过?1正则化,?1正则化,加的不是?2 范数,而是正则项 λ m \lambda \over m mλ乘以 ∑ j = 1 n x ∣ w ∣ \sum_{j=1}^{n_x}|w| j=1nxw ∑ j = 1 n x ∣ w ∣ \sum_{j=1}^{n_x}|w| j=1nxw也被称为参数 w w w向量的?1范数,无论分母是m还是2m,它都是一个比例常量。

我们来看最后一个细节, λ \lambda λ是正则化参数,我们通常使用验证集或交叉验证集来配置这个参数,尝试各种各样的数据,寻找最好的参数,我们要考虑训练集之间的权衡,把参数设置为较小值,这样可以避免过拟合,所以 λ 是另外一个需要调整的超级参数。

直观上理解就是如果正则化?设置得足够大,权重矩阵 W W W被设置为接近于0的值,直观理解就是把多个隐藏单元的权重设为 0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。

但是?会存在一个中间值,于是会有一个接近“Just Right”的中间状态。如果?很小,相对来说,?也会很小。
r2
特别是,如果?的值最终在这个范围内,都是相对较小的值,?(?)大致呈线性,每层几乎都是线性的,和线性回归函数一样。
r3

dropout

在神经网络的训练过程中,对于神经单元按一定的概率将其随机从网络中丢弃,从而达到对于每个mini-batch都是在训练不同网络的效果,防止过拟合。

反向随机失活(inverted dropout)方法通过除以keep-prob,确保?[3]的期望值不变。在测试阶段,不使用dropout。

假设你在训练上图这样的神经网络,它存在过拟合,这就是dropout所要处理的,我们复制这个神经网络,dropout会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是0.5,设置完节点概率,我们会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络,然后用backprop方法进行训练。
d1

数据增强

最简单的数据增强方法就是

  1. 垂直镜像对称 horizontal flip
  2. 随机剪裁 随机剪裁并不是一个完美的数据增强的方法。在实践中,这个方法还是很实用的,随机剪裁构成了很大一部分的真实图片。
  3. 彩色转换,给R、G、B三个通道上加上不同的失真值。训练集中就有失真的图片了。这样做的理由是,由于光线的原因,照片会有色彩的变化。颜色失真或者是颜色变换方法,这样会使你的学习算法对照片的颜色更改更具有鲁棒性。 例:PCA颜色增强

以下方法不常用:旋转,剪切(非裁剪,图像仅水平或垂直坐标放生变化)。扭曲变形,引入很多形式的局部弯曲。常用的实现数据增强的方法是使用一个线程或者是多个线程,这些可以用来加载数据,实现变形失真,然后传给其他的线程或者其他进程,来训练数据。可以并行实现。数据增强过程中也有一些超参数,比如说颜色变化了多少,以及随机裁剪的时候使用的参数。一个好的开始可能是使用别人的开源实现,了解他们如何实现数据赠强。

Softmax回归(softmax regression)

我们想要输出层单元的数字告诉我们这4种类型中每个的概率有多大。
sm1
在神经网络的最后一层,你将会像往常一样计算各层的线性部分,?[?]这是最后一层的?变量,记住这是大写?层,和往常一样,计算方法是 z [ l ] = W [ l ] a [ L − 1 ] + b [ l ] z[l] = W[l]a[L−1] + b[l] z[l]=W[l]a[L1]+b[l],算了?之后,你需要应用 Softmax 激活函数,这个激活函数对于 Softmax 层而言有些不同,它的作用是这样的。首先,我们要计算一个临时变量,我们把它叫做 t,它等于 e z [ l ] e^{z^{[l]}} ez[l],这适用于每个元素,而这里的?[?],在我们的例子中,?[?]是 4×1 的,四维向量 t = e z [ l ] t = e^{z^{[l]}} t=ez[l],这是对所有元素求幂,也是一个 4×1 维向量,然后输出的?[?],基本上就是向量?,但是会归一化,使和为 1。因此 a [ l ] = e z [ l ] ∑ j = 1 4 t i {a^{[l]} = \frac {e^{z^{[l]}}} {\sum^4_{j=1}t_i}} a[l]=j=14tiez[l],换句话说,?[?]也是一个 4×1 维向量,而这个四维向量的第?个元素,我把它写 a i [ l ] = t i ∑ j = 1 4 t i {a_i^{[l]} = \frac {t_i} {\sum^4_{j=1}t_i}} ai[l]=j=14titi
sm2

激活函数

目前激活函数的默认选择为Relu。二分类问题选择sigmoid。

  • sigmoid:除了输出层是一个二分类问题基本不会用它。
  • tanh:tanh 是非常优秀的,几乎适合所有场合。
  • Relu:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLu或者Leaky ReLu
  • Leaky ReLu

sigmoid & tanh

sigmoid函数穿过y=0.5,值域介于0到1之间。

tanh函数穿过原点,值域介于+1和-1之间。在隐藏层使用tanh函数总是优于sigmoid函数。因为函数值域在-1和+1的激活函数,其均值是更接近零均值的。在训练一个算法模型时,如果使用tanh函数代替sigmoid函数中心化数据,使得数据的平均值更接近0而不是0.5。

sigmoid和tanh函数两者共同的缺点是,在z特别大或者特别小的情况下,导数梯度或者函数的斜率会变的特别小,最后就会接近于0, 导致降低梯度下降的速度。

修正线性单元函数(Relu)

Relu的优点:

  • 容易计算
  • 梯度稳定,不会出现梯度消失的情况。
  • 使一部分神经元输出为0,增加稀疏性,防止过拟合。

ReLu函数图像如下图:
j1
a = max(0, z) 所以,只要z是正值的情况下,导数恒等于1,当z是负数的时候,导数恒等于0.

如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当?是负值的时候,导数等于 0。 Relu进入负半区的时候,梯度为0,神经元此时不会训练,产生所谓的稀疏性,而Leaky ReLu不会有这问题) 。?在ReLu的梯度一半都是0,但是,有足够的隐藏层使得z值大于0,所以对大多数的训练数据来说学习过程仍然可以很快。

Leaky ReLu 公式 3.23: ? = ???(0.01?, ?)

为什么常数是 0.01?当然,可以为学习算法选择不同的参数。 在选择自己神经网络的激活函数时,有一定的直观感受,在深度学习中的经常遇到一个。问题:在编写神经网络的时候,会有很多选择:隐藏层单元的个数、激活函数的选择、初始 化权值…这些选择想得到一个对比较好的指导原则是挺困难的。 鉴于以上三个原因,以及在工业界的见闻,提供一种直观的感受,哪一种工业界用的多, 哪一种用的少。但是,自己的神经网络的应用,以及其特殊性,是很难提前知道选择哪些效 果更好。所以通常的建议是:如果不确定哪一个激活函数效果更好,可以把它们都试试,然 后在验证集或者发展集上进行评价。然后看哪一种表现的更好,就去使用它。 为自己的神经网络的应用测试这些不同的选择,会在以后检验自己的神经网络或者评估 算法的时候,看到不同的效果。如果仅仅遵守使用默认的 ReLu 激活函数,而不要用其他的 激励函数,那就可能在近期或者往后,每次解决问题的时候都使用相同的办法。

为什么通常Relu比sigmoid和tanh强,有什么不同?

主要是因为它们gradient特性不同。sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成vanishing gradient的问题,减缓收敛速度。vanishing gradient在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征。

而提出sigmoid和tanh,主要是因为它们全程可导。还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。

ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息

第二个问题:为什么引入Relu呢?

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成*信息丢失),从而无法完成深层网络的训练。

第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

当然现在也有一些对relu的改进,比如prelu,random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进。

多加一句,现在主流的做法,会在做完relu之后,加一步batch normalization,尽可能保证每一层网络的输入具有相同的分布。而最新的paper[2],他们在加入bypass connection之后,发现改变batch normalization的位置会有更好的效果。

梯度消失

在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做消失的梯度问题。

反向传播是用于训练深度神经网络的主要算法,其工作原理是将来自输出损失的反馈信号向下传播到更底部的层。如果这个反馈信号的传播需要经过很多层,那么信号可能会变得非常微弱,甚至完全丢失,导致网络无法训练。这个问题被称为梯度消失(vanishing gradient)。

优化方法

  • SGD
  • Momentum
  • AdaGrad
  • RMSprop
  • Adam

mini-batch

首先,如果训练集较小,直接使用 batch 梯度下降法,样本集较小就没必要使用 mini-batch 梯度下降法,你可以快速处理整个训练集,所以使用 batch 梯度下降法也很好,这里 的少是说小于 2000 个样本,这样比较适合使用 batch 梯度下降法。不然,样本数目较大的 话,一般的 mini-batch 大小为 64 到 512,考虑到电脑内存设置和使用的方式,如果 mini- batch 大小是 2 的?次方,代码会运行地快一些,64 就是 2 的 6 次方,以此类推,128 是 2 的 7 次方,256 是 2 的 8 次方,512 是 2 的 9 次方。所以我经常把 mini-batch 大小设成 2 的次 方。在上一个视频里,我的 mini-batch 大小设为了 1000,建议你可以试一下 1024,也就是 2 的 10 次方。也有 mini-batch 的大小为 1024,不过比较少见,64 到 512 的 mini-batch 比较常见。

随机梯度下降 Stochastic gradient descent (SGD)

梯度下降,即沿着整个训练集的梯度方向下降。这可以使用随机梯度下降很大程度地加速,沿着随机挑选的小批量数据的梯度下降方向。按照数据生成分布抽取m个小批量(独立同分布的)样本,通过计算它们梯度均值,我们可以得到梯度的无偏估计。

SGD算法中的一个关键参数是学习率。可以使用固定的学习率,但在实践中,有必要随着时间的推移逐渐降低学习率。

Batch Normalization 归一化

在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1。

训练神经网络,其中一个加速训练的方法就是归一化输入。假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:1.零均值,2.归一化方差。我们希望无论是训练集和测试集都是通过相同的 μ , σ 2 \mu, \sigma^2 μ,σ2定义的数据转换,这两个是有训练集得出来的。所有数据,通过减去 μ \mu μ使数据集均值为0,通过除以 σ 2 \sigma^2 σ2使方差为1。

如果使用归一化特征,总地直观理解是代价函数会更圆一些,而且更容易优化。

神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。而Batch Normalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。

指数加权平均数

(Exponentially weighted averages)

v t = β v t − 1 + ( 1 − β ) θ t v_t = \beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt
e1
又因此当? = 0.9的时候,我们说仿佛你在计算一个指数加权平均数,只关注了过去 10 天的温度,因为 10 天后,权重下降到不到当日权重的三分之一。 我们平均了大约 1/(1−?)天的温度,这里?代替了1 − ?。

指数加权平均数公式的好处之一在于,它占用极少内存,电脑内存中只占用一行数字而已,然后把最新数据代入公式,不断覆盖就可以了,正因为这个原因,其效率,它基本上只 占用一行代码,计算指数加权平均数也只占用单行数字的存储和内存,当然它并不是最好的, 也不是最精准的计算平均数的方法。如果你要计算移动窗,你直接算出过去 10 天的总和, 过去 50 天的总和,除以 10 和 50 就好,如此往往会得到更好的估测。但缺点是,如果保存 所有最近的温度数据,和过去 10 天的总和,必须占用更多的内存,执行更加复杂,计算成 本也更加高昂。

在机器学习中,在计算指数加权平均数的大部分时候,大家不在乎执行偏差修正,因为大部分人宁愿熬过初始时期,拿到具有偏差的估测,然后继续计算下去。如果你关心初始时期的偏差,在刚开始计算指数加权移动平均数的时候,偏差修正能帮助你在早期获取更好的估测。

动量梯度下降法

(Gradient descent with Momentum)

简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新你的权重。
g1
在上几个导数中,你会发现这些纵轴上的摆动平均值接近于零,所以在纵轴方向,你希望放慢一点,平均过程中,正负数相互抵消,所以平均值接近于零。但在横轴方向,所有的微分都指向横轴方向,因此横轴方向的平均值仍然较大,因此用算法几次迭代后,你发现动量梯度下降法,最终纵轴方向的摆动变小了,横轴方向运动更快,因此你的算法走了一 条更加直接的路径,在抵达最小值的路上减少了摆动。

AdaGrad

独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根。具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的倾斜方向回取得更大的进步。在凸优化背景中,AdaGrad有一些令人满意的理论性质。AdaGrad在某些深度学习模型上效果不错,但不是全部。

RMSprop

RMSprop算法修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。

root mean square prop 算法

S d W = β S d W + ( 1 − β ) d W 2 S_{d_W} = \beta S_{d_W} + (1-\beta)d_W^2 SdW=βSdW+(1β)dW2

S d b = β S d b + ( 1 − β ) d b 2 S_{d_b} = \beta S_{d_b} + (1-\beta)d_b^2 Sdb=βSdb+(1β)db2

RMSprop 会这样更新参数值

W : = W − a d W S d W , b : = b − a d b S d b W := W - a \frac{d_W}{\sqrt{S_{d_W}}}, b := b - a \frac{d_b}{\sqrt{S_{d_b}}} W:=WaSdW dW,b:=baSdb db

要确保你的算法不会除以0,如果 S d W S_{d_W} SdW的平方根趋近于0怎么办?得到的答案就非常大,为了确保数值稳定,在实际操作的时候,你要在分母上加上一个很小很小的?,?是多少没关系,10e−8是个不错的选择,这只是保证数值能稳定一些,无论什么原因,你都不会除以一个很小很小的数。

Adam优化算法

(Adam optimization algorithm)

Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。

Adam 优化算法基本上就是将 MomentumRMSprop 结合在一起

一般使用Adam算法的时候,要计算偏差修正。t是迭代次数
a1
a2

选择正确的优化算法

目前,最流行并且使用率很高的优化算法包括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaGrad和Adam。此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。

学习率衰减

Learning rate decay

所以慢慢减少?的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候, 小一些的学习率能让你步伐小一些。

模型评估方法(针对目标检测)

mAP (mean Average Precision)

各类别AP的平均值。

AP (Average Precision)

Precision-Recall曲线下的面积。

Precision & recall

Precision为模型的预测正确的概率是多少。

Recall为模型找到所有的正样本的能力有多好。

TP = True positive, TN = True negative, FP = False positive, FN = False negative

在目标检测中,TP为IoU>threhold的检测框数量,FP为IoU<=threhold的检测框数量。

P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP

R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP

F − S c o r e = ( 1 + β 2 ) ⋅ P r e c i s i o n ⋅ R e c a l l β 2 ⋅ P r e c i s i o n + R e c a l l F-Score = (1+\beta^2)\cdot \frac{Precision \cdot Recall}{\beta^2 \cdot Precision + Recall} FScore=(1+β2)β2Precision+RecallPrecisionRecall

β = 1 \beta=1 β=1时,称F1-score F 1 = 2 ⋅ p r e c i s i o n ⋅ r e c a l l p r e c i s i o n + r e c a l l F1 = 2\cdot\frac{precision \cdot recall}{precision+recall} F1=2precision+recallprecisionrecall。这时,精确率和召回率同样重要。

β = 2 \beta=2 β=2时,称F2-score F 2 = 5 ⋅ p r e c i s i o n ⋅ r e c a l l p r e c i s i o n + r e c a l l F2 = 5\cdot\frac{precision \cdot recall}{precision+recall} F2=5precision+recallprecisionrecall。这时,召回率更重要些。

当我们需要精确率更重要时,调整的值小于1。当我们需要召回率更重要时,调整的值大于1。

参考:

《深度学习专项课程》吴恩达

《深度学习》Ian Goodfellow等

部分内容来自网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值