
AI之路 - Face
文章平均质量分 83
ytusdc
这个作者很懒,什么都没留下…
展开
-
如何确定梯度消失/爆炸和解决梯度消失/爆炸
在深层网络中,如果激活函数的导数小于1,根据链式求导法则,靠近输入层的参数的梯度因为乘了很多的小于1的数而越来越小,最终就会趋近于0,例如sigmoid函数,其导数f′(x)=f(x)(1−f(x))的值域为(0,1/4),极易发生这种情况。在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。如果梯度爆炸仍然出现,你可以在训练过程中检查和限制梯度的大小。具体来说,检查误差梯度的值是否超过阈值,如果超过,则截断梯度,将梯度设置为阈值。原创 2023-01-10 19:46:48 · 3229 阅读 · 0 评论 -
pytorch 梯度累积(gradient accumulation)
所谓梯度累积过程,其实很简单,我们梯度下降所用的梯度,实际上是多个样本算出来的梯度的平均值,以batch_size=128为例,你可以一次性算出128个样本的梯度然后平均,我也可以每次算16个样本的平均梯度,然后缓存累加起来,算够了8次之后,然后把总梯度除以8,然后才执行参数更新。总结来讲,梯度累积就是每计算一个batch的梯度,不进行清零,而是做梯度的累加,当累加到一定的次数(accumulation_steps)之后,再更新网络参数,然后将梯度清零。原创 2023-01-02 19:47:16 · 10863 阅读 · 2 评论 -
Pytorch中的model. train()和model. eval()
训练完一个epoch,我们可能会生成模型来进行测试。在测试之前,需要加上model.eval(),否则的话,即使不训练,模型的权值也会改变。这是因为模型中有Batch Normalization层和Dropout层。原创 2023-01-02 19:19:02 · 973 阅读 · 0 评论 -
Pytorch—模型微调(fine-tune)
对于不同的层可以设置不同的学习率,一般情况下建议,对于使用的原始数据做初始化的层设置的学习率要小于(一般可设置小于10倍)初始化的学习率,这样保证对于已经初始化的数据不会扭曲的过快,而使用初始化学习率的新层可以快速的收敛。原创 2023-01-02 19:02:54 · 11797 阅读 · 4 评论 -
Pytorch进行自定义Dataset 和 Dataloader 原理
在pytorch中,数据集对象被抽象为Dataset类,实现自定义的数据集需要继承Dataset,并实现相应的方法。在学习Pytorch的教程时,加载数据许多时候都是直接调用里面集成的数据集,直接在线下载,然后使用进行加载。那么,我们怎么使用我们自己的数据集,然后用DataLoader进行加载呢?常见的两种形式的导入:1.1、一种是整个数据集都在一个文件下,内部再另附一个label文件,说明每个文件的状态。这种存放数据的方式可能更时候在非分类问题上得到应用。下面就是我们经常使用的数据存放方式。原创 2023-01-02 01:05:00 · 5290 阅读 · 1 评论 -
int8,FLOPS,FLOPs,TOPS 等具体含义
算力的计量单位FLOPS(Floating-point operations per second),FLOPS表示每秒浮点的运算次数。具体使用时,FLOPS前面还会有一个字母常量,例如TFLOPS、PFLOPS。这个字母T、P代表次数,T代表每秒一万亿次,P代表每秒一千万亿次。除了运算次数,衡量算力水平时还要看算力精度。例如,1000FLOPS的AI计算中心所提供的的算力,与1000FLOPS超级计算机提供的算力,虽然数值相同,但由于精度不同,实际算力水平也是天壤之别。原创 2023-01-01 20:28:59 · 21717 阅读 · 1 评论 -
训练/测试集分布不一致解法总结
数值差距大,比如一个是 0-1,另外一个 0.5-2,如果是这种情况无解,你能做的只能扩大训练集合,因为重要特征一旦偏离,哪怕数学上都是有交集,现实上下文都是差距极大的,这和数据采集流程和规范等非技术问题有关。第四,特征数值差距不大,特征相关性差距也不大,但是目标数值差距过大,这个好办,改变任务设置共同的中间目标,比如你说的目标值是否可以采取相对值,增长率,夏普等,而非绝对值。的差距较大,这种情况可以屏蔽这些特征,或者利用类似迁移学习 prototype 那种思路约束特征输入不过于偏离训练集。原创 2023-01-01 20:00:18 · 944 阅读 · 0 评论 -
one/zero-shot learning(一次学习/零样本学习)的理解
zero-shot learning顾名思义即是对某(些)类别完全不提供训练样本,也就是说没有标注样本的迁移任务被称为零次学习。zero-shot learning是为了能够识别在测试中出现,但是在训练中没有遇到过的数据类别,可以说是迁移学习。zero-shot learning指的是我们之前没有这个类别的训练样本,但是我们可以学习到一个映射X->Y。原创 2023-01-01 19:56:50 · 3238 阅读 · 0 评论 -
为什么深度神经网络这么难训练
根本的问题其实并非是消失的梯度问题或者爆炸的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。网络)表⽰了每个神经元权重和偏置在神经⽹络学习时的变化速率,图中的每个神经元有⼀个条形统计图,表⽰这个神经元在⽹络进⾏学习时改变的速度。这意味着在前⾯的隐藏层中的神经元学习速度要慢于后⾯的隐藏层,这个现象也被称作是梯度消失问题。同样的情况出现了,前⾯的隐藏层的学习速度要低于后⾯的隐藏层。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。原创 2023-01-01 17:58:21 · 892 阅读 · 0 评论 -
多任务的loss优化
多任务学习经常会出现跷跷板现象,即两个任务联合学习的时候,可能一个任务效果变好,另一个任务效果变差。各任务loss量级接近,最好一致;(值域量级接近),loss量级可以使各任务loss除以对应的初始loss(交叉熵损失/L2)针对上述多任务学习优化过程中的问题,业内有一系列的工作进行解决。今天给大家介绍4篇通过梯度优化提升多任务学习效果的方法。各任务以相近的速度进行学习。(学习速度接近), 速度即相邻迭代次数对应的loss的比值,值越小则速度越高。2.2、通过梯度优化提升多任务学习效果的方法。原创 2023-01-01 11:26:49 · 5511 阅读 · 0 评论 -
归一化 (Normalization)、标准化 (Standardization)和中心/零均值化 (Zero-centered)
b、梯度:以输入-隐层-输出这样的三层BP为例,我们知道对于输入-隐层权值的梯度有2ew(1-a^2)*x的形式(e是误差,w是隐层到输出层的权重,a是隐层神经元的值,x是输入),若果输出层的数量级很大,会引起e的数量级很大,同理,w为了将隐层(数量级为1)映身到输出层,w也会很大,再加上x也很大的话,从梯度公式可以看出,三者相乘,梯度就非常大了。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。中心化,也叫零均值处理,就是将每个原始数据减去这些数据的均值。原创 2022-12-31 13:50:52 · 135013 阅读 · 3 评论 -
标签平滑(Label Smoothing)详解
标签平滑(Label smoothing),像L1、L2和dropout一样,是机器学习领域的一种正则化方法,通常用于分类问题,目的是防止模型在训练时过于自信地预测标签,改善泛化能力差的问题。原创 2022-12-31 11:08:39 · 18198 阅读 · 2 评论 -
深度学习模型训练调参的tricks总结
学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其最合适的值都是不确定的,我们无法光凭经验来准确地确定lr的值,我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率。比如下图利用fastai中的lr_find()函数寻找合适的学习率,根据下方的学习率-损失曲线得到此时合适的学习率为1e-2。原创 2022-12-31 10:18:36 · 5886 阅读 · 1 评论 -
Pytorch中 stack和cat, squeeze 和 unsqueeze 之间的差别
stack和cat, squeeze 和 unsqueeze原创 2022-08-21 21:15:49 · 550 阅读 · 0 评论 -
Pytorch中 permute / transpose 和 view / reshape, flatten函数
Pytorch中 permute、transpose 和 view 、resize函数原创 2022-08-21 18:14:49 · 5322 阅读 · 2 评论 -
Pytorch训练模型损失Loss为Nan或者无穷大(INF)原因
常见原因-1一般来说,出现NaN有以下几种情况:相信很多人都遇到过训练一个deep model的过程中,loss突然变成了NaN。在这里对这个问题做一个总结:1.如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率。可以不断降低学习率直至不出现NaN为止,一般来说低于现有学习率1-10倍即可。2.如果当前的网络是类似于RNN的循环神经网络的话,出现NaN可能是因为梯度爆炸的原因,一个有效的方式是增加“gradient clipping”(梯度截断来解决)原创 2022-02-12 12:20:47 · 70702 阅读 · 4 评论 -
为什么在进行softmax之前需要对attention进行scaled(为什么除以 d_k的平方根)
因此,d_k 的平方根被用于缩放(而非其他数值),因为,Q和K的矩阵乘积的均值本应该为0,方差本应该为1,这样会获得一个更平缓的softmax。另外一个需要注意的点为什么要除以根号dk,因为Q和K的内积结果,随着其维度变大,方差会变大,进而可能会出现很大的值,除以根号dk保证输出结果的不会出现过大值,这个在原论文中是有说明注解的。这样做是因为对于较大的深度值,点积的大小会增大,从而推动softmax函数往仅有很小的梯度的方向靠拢(分布集中在绝对值大的区域),导致了一种很硬的(hard)softmax。...原创 2021-11-29 23:26:45 · 7313 阅读 · 1 评论 -
下采样和上采样
1、下采样的作用是什么?通常有哪些方式?下采样层有两个作用,一是减少计算量,防止过拟合;二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的方式主要有两种:1、采用stride为2的池化层,如Max-pooling和Average-pooling,目前通常使用Max-pooling,因为他计算简单而且能够更好的保留纹理特征;2、采用stride为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,原创 2021-11-21 13:53:46 · 40139 阅读 · 0 评论 -
手推BP神经网络反向传播过程
参考文章:https://www.cnblogs.com/jsfantasy/p/12177275.html1转载 2021-09-02 23:53:51 · 345 阅读 · 0 评论 -
pytorch中多卡训练
- pytorch中多卡训练的过程是怎样的?- 每张卡都有模型的话BN的参数一样吗?- pytorch的DistributedDataParallel每个GPU上的模型参数是完全一样的么?参数一样,但某些时刻梯度不一样。DDP工作模式下,流程可以想像成:并行计算各自的loss 并行backward 不同卡之间同步梯度 反向传播因为不同卡之间的随机初始化是相同的,DDP可以保证不同进程之间的model参数总是一样的.你看源码的时候应该也看到了类注释里的NOTICE和WAR...原创 2021-08-24 17:36:08 · 2304 阅读 · 0 评论 -
深度学习训练策略--学习率预热Warmup
背景学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。 其实在我们的大多数情况下,遇到 loss 变成 NaN 的情况大多数是由于学习率选择不当引起的。一、Warmup的最初提出?Warmup是在ResNet论文中提到的一种学习率预热的方法,它在训练开始的时候先选择使用一个较小的学习率,训练了一些steps(15000steps,见最后代码1)或者epoches(5epoches,见最后代码2),再修改为预先设置的学习来进行训练。代码查看:https://bl原创 2021-08-24 17:25:45 · 5357 阅读 · 1 评论 -
Resnet的跳转连接实现 (pytorch)
在原论文中,残差路径可以大致分成2种,一种有bottleneck结构,即下图右所示,其中两个1×1卷积层,用于先降维再升维,主要出于降低计算复杂度的现实考虑,称之为“bottleneck block”,另一种没有bottleneck结构,如下图左所示,称之为“basic block”。basic block由2个3×3卷积层构成shortcut路径大致也可以分成2种,取决于残差路径是否改变了feature map数量和尺寸,一种是将输入 x 原封不动地输出,另一种则需要经过 1×1 卷积来升...原创 2021-08-20 17:47:48 · 4483 阅读 · 0 评论 -
softmax交叉熵的两种形式 + numpy 实现
- 卷积底层的实现方式(如caffe里面的img2col)- 卷积、Max Pooling和 Average Pooling 代码实现- 手撕 IoU, NMS, 及其变体 SoftNMS代码,- Soft nms 解决了什么问题。soft nms的具体过程原创 2021-08-19 20:12:05 · 4225 阅读 · 0 评论 -
模型调参、训练模型 trick
- 介绍你知道的调参tricks - 说下平时用到的深度学习的trick - 关于神经网络的调参顺序? - 如何训练模型、调优https://www.zhihu.com/question/25097993/answer/161393876https://www.zhihu.com/question/25097993/answer/136222606https://www.zhihu.com/question/25097993/answer/651617880你有哪些deep ...原创 2021-08-18 16:46:02 · 1128 阅读 · 0 评论 -
语义分割相关
1、FCN与CNN最大的区别?FCN网络为什么用全卷积层代替全连接层?全卷积网络 FCN 详解全卷积网络(FCN)详解全卷积网络FCN详解传统 CNN 有几个缺点:存储开销大,滑动窗口较大,每个窗口都需要存储空间来保存特征和判别类别,而且使用全连接结构,最后几层将近指数级存储递增 计算效率低,大量重复计算 滑动窗口大小是相对独立的,末端使用全连接只能约束局部特征。FCN改进:卷积化:全连接层(6,7,8)都变成卷积层,适应任意尺寸输入,输出低分辨率的分割图片。反卷积:利用反原创 2021-08-16 20:39:02 · 849 阅读 · 1 评论 -
AUC曲线计算方法及代码实现
AUC计算1. 根据定义Aera Under Curve,计算面积。样本有限,所以得到的AUC曲线一般是个阶梯状,所以计算这些阶梯的面积即可。先按score排个序,然后从头遍历一遍,把每个score作为划分阈值,可以得到对应的TPR和FPR,计算出底下的面积。更直观的计算方法,参考《百面机器学习》:这种直接计算面积的方法比较麻烦,一般使用下面的等价方法进行计算。2. AUC等价于:测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。所以可以计算..转载 2021-05-21 19:12:29 · 2940 阅读 · 0 评论 -
Transformer 相关问题
1、Transformer为何使用多头注意力机制?(为什么不使用一个头) https://www.zhihu.com/question/341222779 注解:简单回答就是,多头保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。 Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘? (注意和第一个问题的区别) Transformer计算attention的时候为何选择点乘而不是...原创 2021-05-18 19:53:36 · 880 阅读 · 0 评论 -
Max Pooling和 Average Pooling的区别,使用场景分别是什么?
池化操作时在卷积神经网络中经常采用过的一个基本操作,一般在卷积层后面都会接一个池化操作,但是近些年比较主流的ImageNet上的分类算法模型都是使用的max-pooling,很少使用average-pooling,这对我们平时设计模型时确实有比较重要的参考作用,但是原因在哪里呢? pooling作为一个对特征的操作,应该看具体任务。有论文提到,低层的网络对细节特征的响应...转载 2020-02-20 18:43:47 · 29602 阅读 · 2 评论 -
Anchor-based 与 Anchor-free 优缺点
Anchor-based机制的优缺点1. 优点:(1)使用anchor机制产生密集的anchor box,使得网络可直接在此基础上进行目标分类及边界框坐标回归;(2)密集的anchor box可有效提高网络目标召回能力,对于小目标检测来说提升非常明显。2. 缺点:(1)anchor机制中,需要设定的超参:尺度(scale)和长宽比( aspect ratio)是比较难设计的。这需要较强的先验知识。(2)冗余框非常之多:一张图像内的目标毕竟是有限的,基于每个anchor设定大量anch原创 2020-08-07 16:14:44 · 9297 阅读 · 0 评论 -
batch size与lr的关系, batch_size是否越大越好?
另外看一下参考链接:训练神经网络时如何确定batch的大小?当初随机梯度下降法和mini_batch梯度下降法的面世,是为了优化批量梯度下降法计算效率缓慢且对gpu显存要求较高的问题。那么,在显存容量支持的前提下,是否batch_size越大越好呢?原文:Training withlarge minibatchesis bad for your health. More importantly, it’s bad for your test error. Friends don‘t let ..转载 2020-08-02 16:45:42 · 18645 阅读 · 6 评论 -
神经网络调参:loss 问题汇总(震荡/剧烈抖动,loss不收敛/不下降)
一、模型不收敛主要有以下几个原因:1、learning rate设大了会带来跑飞(loss突然一直很大)的问题 这个是新手最常见的情况——为啥网络跑着跑着看着要收敛了结果突然飞了呢?可能性最大的原因是你用了relu作为激活函数的同时使用了softmax或者带有exp的函数做分类层的loss函数。当某一次训练传到最后一层的时候,某一节点激活过度(比如100),那么exp(100)=Inf,发生溢出,bp后所有的weight会变成NAN,然后从此之后weight就会一直保持NAN,于是loss...原创 2020-08-01 23:59:15 · 163469 阅读 · 23 评论 -
ReLU为什么比Sigmoid效果好
ReLU为什么比Sigmoid效果好附:双曲函数类似于常见的(也叫圆函数的)三角函数。基本双曲函数是双曲正弦"sinh",双曲余弦"cosh",从它们导出双曲正切"tanh"sigmod函数:Relu函数:综合:为什么通常Relu比sigmoid和tanh强,有什么不同? 主要是因为它们gradient特性不同。sigmoid和tanh的gr...原创 2019-01-02 19:35:50 · 12339 阅读 · 0 评论 -
一文搞懂激活函数
1、什么是激活函数 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。2、激活函数的用途(为什么需要激活函数)?1. 对于y=ax+b 这样的函数,当x的输入很大时,y的输出也是无限大小的,经过多层网络叠加后,值更加膨胀的没边了,这显然不符合我们的预期,很多情况下我们希...原创 2020-08-01 12:38:37 · 16457 阅读 · 1 评论 -
ROC曲线 vs Precision-Recall曲线
参考1:https://www.cnblogs.com/JesusAlone/p/9762352.html参考2:https://www.pianshen.com/article/8810789641/ROC曲线和AUC的定义可以参看“ROC曲线于AUC”,Precision-Recall曲线顾名思义即Precision为纵轴,Recall为横轴的曲线,作图方法与AUC曲线一致,只是横纵轴坐标意义不同。ROC曲线 vs PR曲线——ROC曲线的优势 相比P-R曲线,ROC曲线有个很好的特性转载 2020-07-30 20:27:24 · 2341 阅读 · 0 评论 -
CNN的平移不变性是什么?
什么是平移不变性不变性不变性意味着即使目标的外观发生了某种变化,但是你依然可以把它识别出来。这对图像分类来说是一种很好的特性,因为我们希望图像中目标无论是被平移,被旋转,还是被缩放,甚至是不同的光照条件、视角,都可以被成功地识别出来。所以上面的描述就对应着各种不变性:平移不变性:Translation Invariance 旋转/视角不变性:Ratation/Viewpoint Invariance 尺度不变性:Size Invariance 光照不变性:Illumination In转载 2020-07-29 17:13:56 · 24123 阅读 · 7 评论 -
卷积相关概念
0、卷积的概念如何通俗易懂地解释卷积:https://www.zhihu.com/question/222983521、卷积核的作用,哪些情况可以使用1x1卷积?1*1 filter: 作用是在不影响输入输出维数的情况下,对输入进行线性形变,然后通过Relu进行非线性处理,增加网络的非线性表达能力。实现跨通道的信息交互和信息整合、不同channel上特征的融合 进行卷积核通道数.........原创 2020-02-20 00:19:12 · 1077 阅读 · 2 评论 -
损失函数相关(loss)
1、为什么分类用交叉熵而不用MSE(均方误差mean squared error --欧氏距离)分类问题的目标变量是离散的,而回归是连续的数值。因此分类问题用 cross entropy,回归问题用 mean squared error。分类问题总的来说,分类问题需要用 one hot 的形式计算个 label 的概率,然后用 argmax 来决定分类。计算概率的时候通常用 softmax...原创 2019-10-29 20:04:22 · 1304 阅读 · 0 评论 -
py-faster rcnn中rpn的3x3的滑框用卷积层来定义的是为什么?
1.卷积操作本身就是一个卷积核(滑动窗口)在特征图(图像)的滑动操作。2.这里滑动窗口的目的是为了取每个窗口的特征: 对于VGG16,最后一个卷积层(conv5_3)的feature map个数为512,使用3x3的卷积核可以每张feature map上获取一个1x1的特征,总共是512的一个特征向量,这个向量也就是当前滑窗对应的特征。3.为什么使用3x3的滑窗而不是2x2或者其他,个...转载 2019-03-27 16:37:53 · 1495 阅读 · 2 评论 -
数据集介绍
1、目标检测数据集PASCAL VOC简介 :https://arleyzhang.github.io/articles/1dc20586/2、目标检测数据集MSCOCO简介 :https://arleyzhang.github.io/articles/e5b86f16/voc数据集VOC2007数据集共包含:训练集(5011幅),测试集(4952幅),共计9963幅图,共包含20个...原创 2019-03-04 17:38:48 · 4069 阅读 · 1 评论 -
多标签图像分类任务的评价方法-mAP
另一篇文章:1、mAP 介绍 :https://blog.youkuaiyun.com/ytusdc/article/details/864966442、目标检测评价标准-AP mAP:https://arleyzhang.github.io/articles/c521a01c/3、COCO目标检测测评指标:https://www.jianshu.com/p/d7a06a720a2b先...原创 2019-03-03 22:39:20 · 1099 阅读 · 0 评论