为您找到搜索结果:4608个
不确定估计学习小结
最近,观看了危夷晨大佬关于《不确定性学习在视觉识别中的应用》的报告,认为不确定性学习在用武之地,所以特意对相关论文进行了总结。 以人脸识别为例,输入一张人脸图像,得到一个特征向量embedding,将此特征向量与底库中的特征向量计算相似度,从而根据此相似度来判断两张人脸图像是否属于同一个ID。假设相似度很高(95%),则认为这两张人脸图像属于同一个人。这种将一张输入图像x映射到高维空间中的一个点embedding的方式,可以被称为确定性预测(deterministicprediction)。但以同样的人脸系统、相同的底库来看,假设我们输入一张很模糊的人脸或者一张猫的图片,此时系统可能会给出同样是95%的相似度。然而,在这种情形下,这种相似度得分并不能反映出两张图片是属于同一ID的,即这个相似度结果不可信。因此,我们不仅需要一个相似度得分,还需要一个能判断此相似度是否可信的得分。具体而言,假设在此种情形下,即使两种图片的相似度得分是95%,但只有10%的得分认为该相似度得分可行,那么做出判断就需要更加谨慎。 再举一个例子,假设我们使用了cifar100来训...
深度学习归一化:BN、GN与FRN
在深度学习中,使用归一化层成为了很多网络的标配。最近,研究了不同的归一化层,如BN,GN和FRN。接下来,介绍一下这三种归一化算法。BN层是由谷歌提出的,其相关论文为《BatchNormalization:AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift》,即Inceptionv2的主要思想。大家也可以看回我以前的博客,关于这个BN层的介绍。BN层的提出,主要解决的一个问题是InternalCovariateShift。在BN层提出以前,是很难训练一个深层次的网络的,其主要难点是每层的数据分布均会发生变化,使得神经元需要去学习新的分布,导致模型训练缓慢、难以收敛。因此,作者借助了白化的思想,将每层数据都归一化成均值为0、方差为1的分布,如公式(1)所示,即减去均值、除以方差。这样就能是每层的数据分布不会发生过大变化,从而导致模型容易训练。$$hat{x}^{(k)}=frac{x^{(k)}-E[x^{(k)}]}{sqrt{Var(x^{(k)})}}ag{1}$$但同时也引入了一个问题,我们将数据强行的归...
深度学习权重初始化
深度学习其本质是优化所有权重的值,使其达到一个最优解的状态,这其中,需要更新权重的层包括卷积层、BN层和FC层等。在最优化中,权重的初始化是得到最优解的重要步骤。如果权重初始化不恰当,则可能会导致模型陷入局部最优解,导致模型预测效果不理想,甚至使损失函数震荡,模型不收敛。而且,使用不同的权重初始化方式,模型最终达到的效果也是很不一样的。因此,掌握权重的初始化方式是炼丹师必备的炼丹术之一。在这里,我介绍一下深度学习中,我们常用的几种权重初始化的方式。 Xavier初始化方法提出于2010年的《Understandingthedifficultyoftrainingdeepfeedforwardneuralnetworks》中。Xavier初始化的方式其基本思想是“方差一致性”,即保持激活值的方差一致或者梯度的方差一致,这样有利于优化。基于该基本思想,作者假设每层的输入位于激活函数的线性区域,且具备零点对称的分布。首先,对于每个卷积层,其响应结果为:$$Y_l=W_lX_l+b_lag{1}$$其中,$X_l$是每层的输入参数,其shape为$(kimeskimesc)$,$k$...
深度学习之损失函数小结
在深度学习中,损失函数扮演着至关重要的角色。通过对最小化损失函数,使模型达到收敛状态,减少模型预测值的误差。因此,不同的损失函数,对模型的影响是重大的。接下来,总结一下,在工作中经常用到的损失函数:图像分类:交叉熵目标检测:Focalloss,L1/L2损失函数,IOULoss,GIOU,DIOU,CIOU图像识别:TripletLoss,CenterLoss,Sphereface,Cosface,Arcface在图像分类中,经常使用softmax+交叉熵作为损失函数,具体的推导可以参考我以前的博客。$$CrossEntropy=-sum_{i=1}^{n}p(x_i)ln(q(x_i))$$其中,$p(x)$表示真实概率分布,$q(x)$表示预测概率分布。交叉熵损失函数通过缩小两个概率分布的差异,来使预测概率分布尽可能达到真实概率分布。后来,谷歌在交叉熵的基础上,提出了labelsmoothing(标签平滑),具体介绍,可以参考这篇博客。/在实际中,需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:无法保证模型的泛化能力,容易造成过拟合;全概率和0概率鼓...
SSD学习笔记
目标检测算法——SSD:SingleShotMultiBoxDetector,是一篇非常经典的目标检测算法,十分值得阅读和进行代码复现,其论文地址是:https://arxiv.org/abs/1512.02325。同时,我使用pytorch对SSD代码进行了复现:https://github.com/Dengshunge/mySSD_pytorch 从论文的题目《SSD:SingleShotMultiBoxDetector》可以看出,singleshot表明是one_stage检测算法,即不需要类似fasterR-CNN中的RPN等区域推荐算法,一步就能得到预测坐标和类别,实现真正的end-to-end训练;multibox表示是多框预测,即SSD算法借鉴了fasterR-CNN中的锚点框思想,对每个先验锚点框进行预测,判断其类别和目标的预测框。在SSD算法提出之前,R-CNN系列的目标检测算法,其准确率很高,但是这些算法需要消耗大量计算资源,特别是对于嵌入式设备或者终端设备,其算力无法满足此类算法,造成了无法进行实时目标检测。目标检测的检测速度通常使用FPS进行衡量,即1...
MixNet学习笔记
最近,谷歌使用了AutoML,推出了一种新网络:MixNet,其论文为《MixNet:MixedDepthwiseConvolutionalKernels》。其主要创新点是,研究不同卷积核尺寸的影响和观察到组合不同尺寸的卷积核能提高准确率。作者将混合了不同尺寸的卷积核的卷积操作命名为MDConv,并将其使用在深度可分离卷积中,能提高显存的MobileNet的准确率。3*3的卷积已经得到了广泛的实践应用了,但是随着近期部分网络的推出,5*5或者7*7的大卷积核有重新出现,例如EfficientNet,这些网络都证明了,大卷积核能提高模型的准确率和效率。但是否卷积核越大,准确率就越高呢?作者首先在mobilenet上分析了,不同尺寸的卷积核对准确率的影响,如Fig.1所示。可以看出,卷积核越大,模型的大小也随之增加;随着卷积核增加,准确率先上升,后下降。说明了,卷积核并不是越大越好,过大的卷积核会损伤模型的准确率。对比实验也表明了:我们需要大卷积核来高分辨率、小卷积核来适应低分辨率。 为了实现这一点,作者提出了mixeddepthwiseconvolution(MDC...
ShuffleNet系列学习笔记
ShuffleNet是旷世提出的高效轻量化网络,是一款很值得一提的轻量化网络,其相关论文也是很有价值的。该网络提出于2017年,论文为《ShuffleNet:AnExtremelyEfficientConvolutionalNeuralNetworkforMobileDevices》。由于Xception和ResNeXt中存在大量密集的1*1卷积,导致网络十分低效。因此,旷世提出了pointwisegroupconvolutions来减少1*1卷积的计算复杂度。但是,这样会带来副作用:通道间的信息没有得到很好的交流融合。所以,继而提出channelshuffle来帮助信息在不同特征通道中的流动。可以看出,ShuffleNetV1的主要两个创新点是pointwisegroupconvolutions和channelshuffle。 如Fig.1所示,左图是普通的group卷积,卷积核只有相应的输入通道进行作用,不同通道之间信息没有交流。如果组数等于通道数,就可以理解成mobilenet中的depthwiseconvolution。(b)图是将通道进行重新打乱排列,使...
EfficientNet学习笔记
EfficientNet是谷歌大脑在2019年提出的,论文地址是:https://arxiv.org/pdf/1905.11946.pdf这篇文章主要想解决的一个问题是,如何平衡网络的深度、宽度和分辨率来提高模型的准确率。通常而言,提高网络的深度、宽度和分辨率来扩大模型,从而提高模型的泛化能力。但如果单一提高某个参数的话,模型准确率很快会达到饱和,如下图所示。因此,需要同时对深度、宽度和分辨率来进行调整。作者提出了“复合相关系数(compoundcoefficient)”来动态提高这3个参数,如下图所示,(a)是baselinemodel,(b)-(d)是单一提高某个参数,(e)是3个参数动态调整。最终得到的结果,如下图所示。就EfficientNet-b0而言,其准确率比ResNet50还高,参数量更少和FLOPS更低(不知道FLOPS能否代表速度的意思?)。从总体而言,在同等参数量下,EfficientNet系列都完胜其他网络。 下面,我们具体来了解一下EfficientNet的细节。 前文提及到,动态调整深度、宽度和分辨率能提高网络的准...
Java命令学习系列(2):Jstack
转载:http://www.importnew.com/18176.html原文出处: Hollis(@Hollis_Chuang)/jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的javastack和nativestack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的javastack和nativestack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。/So,jstack命令主要用来查看Java线程的...
Vxlan学习笔记——原理(转)
文章转自http://www.cnblogs.com/hbgzy/p/5279269.html 普通的VLAN数量只有4096个,无法满足大规模云计算IDC的需求,而IDC为何需求那么多VLAN呢,因为目前大部分IDC内部结构主要分为两种L2,L3。L2结构里面,所有的服务器都在一个大的局域网里面,TOR透明L2,不同交换机上的服务器互通靠MAC地址,通信隔离和广播隔离靠的vlan,网关在内网核心上。而L3结构这是从TOR级别上就开始用协议进行互联,网关在TOR上,不同交换机之间的互通靠IP地址。 在云计算IDC里,要求服务器做到虚拟化,原来这个服务器挂在TORA上,我可以随意把它迁移到TORB上,而不需要改变IP地址,这个有点就是L2网路的特长,因为我这个虚拟服务器和外界(网关之外)通信还靠L3,但是我网关内部互访是走L2的,这个在L3里是无法做到的。因为L3里每个IP都是唯一的,地址也是固定位置的,除非你整网段物理搬迁。因此如何在L3网络里传输L2数据呢,这就是overlay技术。 因此VXLAN(VirtualeXtensibleLAN可扩展虚拟局域网)诞生了,基于IP网络...
css学习之样式层级和权重
第一种情况当选择器相同的情况下,引入方式的前后,决定页面最后的效果---------外部在最后面显示---------内部在最后面显示第二种情况引入方式相同时候,则是按照权重取最大(取权重最大值显示)去确定最后样式(此处以外部样式为例子) 选择器 权重id100类10元素1继承0.5 例子二虽然其他的很精确,但是权重还是id的最大,所以显示为id选择器属性 第三种情况 如果引入方式和选择器相同,则按最后的样式为主 第四种情况就是!important会使用这个样式 浏览器默认的样式<网页制作者样式<用户自己设置的样式<!important ...
jsp base标签与meta标签学习小结
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%> <!--定义jsp的编码,还有引入的java文件--> <% Stringpath=request.getContextPath(); //得到当前的项目名字。 StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; //当前项目的基础url. %> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <!--当前http://当前主机:端口/项目名base标签定义了当前jsp所属的绝对路径--> <basehre...
flask学习导航主页
我就学习了网易课堂的知了Flaskk。十分感谢。└—01-Flask视图和URL├—课时001.【Flask预热】课程介绍├—课时002.【Flask预热】Flask课程准备工作├—课时003.【Flask预热】URL组成部分详解├—课时004.【Flask预热】web服务器+应用服务器+web应用框架├—课时005.【Flask.URL】第一个flask程序详解├—课时006.【Flask.URL】debug模式详解├—课时007.【Flask.URL】配置文件两种方式详解├—课时008.【Flask.URL】URL中两种方式传参├—课时009.【Flask.URL】url_for使用详解├—课时010.【Flask.URL】自定义URL转换器├—课时011.【Flask.URL】必会的小细节知识├—课时012.【Flask.URL】重定向详解├—课时013.【Flask.URL】视图函数Response返回值详解└—02-Jinja2模版├—课时014.【Flask模版】Jinja2模版介绍和查找路径├—课时015.【Flask模版】模版传参及其技巧├—课时016.【Flask模版...
集成学习的不二法门bagging、boosting和三大法宝<结合策略>平均法,投票法和学习法(stacking)
单个学习器要么容易欠拟合要么容易过拟合,为了获得泛化性能优良的学习器,可以训练多个个体学习器,通过一定的结合策略,最终形成一个强学习器。这种集成多个个体学习器的方法称为集成学习(ensemblelearning)。集成学习通过组合多种模型来改善机器学习的结果,与单一的模型相比,这种方法允许产生更好的预测性能。集成学习属于元算法,即结合数个“好而不同”的机器学习技术,形成一个预测模型,以此来降方差(bagging),减偏差(boosting),提升预测准确性(stacking)。个体学习器(又称为“基学习器”)的选择有两种方式:集成中只包含同种类型的个体学习器,称为同质集成。集成中包含不同类型的个体学习器,为异质集成。目前同质集成的应用最广泛,而基学习器使用最多的模型是CART决策树和神经网络。按照个体学习器之间是否存在依赖关系可以分为两类:个体学习器之间存在强依赖关系,一系列个体学习器基本必须串行生成,代表是boosting系列算法。个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表是bagging系列算法。1.1boosting算法原理boosting的算法原理如下所...