
深度机器学习组件
文章平均质量分 61
深度学习,机器学习方法理论实践知识
Kun Li
自古山高水远路,无一不为风尘苦。
展开
-
大模型训练框架
优化器并行:单个GPU的显存无法放下大模型,通常来说,模型训练过程中,GPU上需要进行存储的参数包括了模型本身的参数、优化器状态、激活函数的输出值、梯度以及一些零时的Buffer。优化器相关的并行是一种去除冗余数据的并行,ZeRO,零冗余优化器,针对模型状态的存储优化,ZeRO使用的是分片,即每张卡只存1/N的模型状态量,这样系统只维护一份模型状态,ZeRO有3个级别,1.ZeRO-1,对优化器状态分片;模型并行:模型被分割并分布在一个设备阵列上,有两种方式:张量并行/流水线并行。原创 2023-10-25 14:02:26 · 875 阅读 · 0 评论 -
pytorch中的单机多卡和多机多卡
pytorch 单机多卡的正确打开方式pytorch 使用单机多卡,大体上有两种方式简单方便的 torch.nn.DataParallel(很 low,但是真的很简单很友好)使用 torch.distributed 加速并行训练(推荐,但是不友好)首先讲一下这两种方式分别的优缺点nn.DataParallel优点:就是简单缺点就是:所有的数据要先load到主GPU上,然后再分发给每个GPU去train,注意这时候主GPU的显存占用很大,你想提升batch_size,那你的主GPU就会限制。原创 2022-09-22 20:44:51 · 4141 阅读 · 0 评论 -
cnn中的动态卷积
模块核心是类似se的通道作用机制,对通道维度进行重要性分数生成,然后取topk进行排序,对其余的卷积值进行0填充,在进行卷积操作。总结一波cnn卷积核上的设计,核心思路是对卷积核做一些改进,更加轻量化,高效。原创 2022-09-22 08:16:52 · 1090 阅读 · 0 评论 -
调试mmsegmentation
mmsegmentation不支持windows上训练,我在windows调试总是会在loss这块报错。但是在linux上一调就通。原创 2022-05-11 11:50:00 · 1099 阅读 · 0 评论 -
调试mmcls
调试mmcls主要是让自己记住要改的几步,不然总是容易忘。1.数据输入有两种,一种可以带ann_file形式,一种是不带,通常不带的,就直接取train文件下的几类做训练的,如果是带,形式上是一行图片名称,后面跟类别,135efbeaeb592d3b51edca5dff099de6 1这种形式是不可取的,要完整的文件名,否则要去修改一下,要记住mm系列中数据集和数据前处理是分离的,数据集是用来__getitem__和测评数据的,前处理是处理成模型想要的输入格式。格式不对,属于读取数据在load原创 2022-05-11 09:44:48 · 763 阅读 · 0 评论 -
mm_add系列讲解
在一直转移到mm系列的框架应用之后,我觉得以mmcv为基础的框架还是指引了很好的思路,其实mmcv对标的pytorch lighning都是对深度学习流程的封装,在此基础上衍生各种算法库,之前使用mm系列代码,总是要及时跟进最新的mm算法,造成在某一个版本上更新自己想要的一些算法之后,官方很快又更新库了,再pull就很混乱了,经过一段时间的使用和总结,我觉得开启一个新的系列,叫mm_add,mm_add基于各自的算法库,比如mmdetection_add,底层基于mmcv和mmdet,在安装了相应的.whl原创 2022-03-25 16:22:21 · 2933 阅读 · 0 评论 -
mmclas中的vit
Vision Transformer 必读系列之图像分类综述(一):概述 - 知乎文 @ 000007 号外号外:awesome-vit 上新啦,欢迎大家 Star Star Star ~https://github.com/open-mmlab/awesome-vitVision Transformer 必读系列之图像分类第二、三篇也上线了,读完此篇可以接着学习哦~OpenMMLab…https://zhuanlan.zhihu.com/p/459828118Vision Transformer 必读系列原创 2022-03-06 18:57:53 · 245 阅读 · 0 评论 -
mmcv解析-tpcv
这个系列旨在围绕着mmcv,解析封装了pytorch训练的一系列代码,不涉及到具体的算子封装这个层面,算子封装要到关注算法时采取关注。原创 2022-03-06 18:26:43 · 1661 阅读 · 0 评论 -
在win上调试测试mmdet
在win上跑mmdet仅仅为了去看算法细节,方便调试,而不是跑项目,跑项目还是要到linux环境上面搞,记录一些更改的地方是为了在mmdet更新之后能够快速跟进,核心是理解正负样本分类和均衡问题。1.把mmcv放到和mmdet同级目录下,屏蔽掉mmcv/utils/ext_loader中的load_ext函数,主要是因为mmcv部分的底层算子是用cpp和cuda重写的,所以在上层通过pybind11做了一层封装调用,如果看细节的,部分算子用不到,直接pass。2.准备数据集,主要可以...原创 2022-03-06 18:12:00 · 701 阅读 · 0 评论 -
vit超参敏感
1.vit类网络结构应用了比较大的conv或者unfold操作,随机性要高,3x3或者5x5的小卷积核的稳定性要更高。2.transformer切分成大的patch时,牺牲了局部的空间相关性来补全全局的相关性,像在banner优化中,优化一个局部区域的损失函数和优化全局的损失函数,全局的损失函数是很难优化的,还有就是人眼去看,看一个局部很容易,单看全局就容易抓不住重点,所以超参实际上是某种程度上的均衡边界。...原创 2022-03-04 15:07:04 · 751 阅读 · 0 评论 -
用numpy实现pytorch式的深度学习框架similartorch
https://github.com/kaszperro/slick-dnnhttps://github.com/kaszperro/slick-dnn原创 2022-02-25 16:19:17 · 1357 阅读 · 0 评论 -
用numpy实现tensorflow式的深度学习框架similarflow
SimpleFlow | PytLabPersonal Blog of ShaoZhengjianghttp://pytlab.github.io/tags/SimpleFlow/如何理解TensorFlow计算图? - 知乎nlp-paper:NLP相关Paper笔记和代码复现 nlp-dialogue:一个开源的全流程对话系统,更新中! 说明:阅读原文时进行相关思想、结构、优缺点,内容进行提炼和记录,原文和相关引用会标明出处,引用之处如有侵权,烦…https://zhuanlan.zhihu.com/p原创 2022-02-19 14:48:33 · 1575 阅读 · 0 评论 -
pytorch框架
一文搞懂 PyTorch 内部机制 - 知乎原文链接:http://blog.ezyang.com/2019/05/pytorch-internals/ 原文出处:https://archwalker.github.io 原文地址:一文搞懂 PyTorch 内部机制译者序:这篇博文是一篇非常新的介绍PyTorch内部机制的文章,作者Edw…https://zhuanlan.zhihu.com/p/338256656PyTorch – Internal Architecture Tour | Terra In原创 2022-02-17 11:35:54 · 3649 阅读 · 0 评论 -
mmclas的分布式训练
「新生手册」:PyTorch分布式训练 - 知乎目录0X01 分布式并行训练概述0X02 Pytorch分布式数据并行0X03 手把手渐进式实战A. 单机单卡B. 单机多卡DPC. 多机多卡DDPD. Launch / Slurm 调度方式0X04 完整框架 Distribuuuu0X05 Reference 文中所有教学代码和日…https://zhuanlan.zhihu.com/p/360405558轻松掌握 MMDetection 整体构建流程(二) - 知乎文@ 0000070 摘要在 轻松掌握原创 2021-12-11 12:36:01 · 725 阅读 · 0 评论 -
nms的confience阈值,iou阈值,计算map的confience阈值和iou阈值
nms去除冗余框下面是知乎上画的一组图,非常好理解。检测得到四个坐标相关值和每一个bb所对应的类别的置信度,首先选定一个confidence阈值,将低于confidence的置信度给过滤掉,其次选定每一类最高的confience所对应的的检测框,计算其余剩下检测框的iou,iou阈值以上的删除(nms去冗余,相近的框删掉),一轮之后,在选定剩下违背删掉的iou中置信度最高的,继续和剩下的检...原创 2019-08-03 20:13:26 · 6387 阅读 · 5 评论 -
cifar10 数据的下载和使用
cifar 是重要的评测数据集import cv2import numpy as npfrom keras.datasets import cifar10from keras.utils import np_utilsnb_train_samples = 3000nb_valid_samples = 100num_classes = 10def load_cifar10...原创 2019-02-14 13:26:59 · 3467 阅读 · 0 评论 -
tf 中权重初始化方法
最常见的两类方法就是 msra 的 he_initialization 和 Xavier initialization 。def conv_var(kernel_size, in_channels, out_channels, init_method, name): shape = [kernel_size[0], kernel_size[1], in_channels, out_c...原创 2019-01-22 22:02:30 · 6836 阅读 · 0 评论 -
下载 mask_rcnn 预训练的权重 mask_rcnn_coco.h5
import osimport urllib.requestimport shutil# URL from which to download the latest COCO trained weightsCOCO_MODEL_URL = "https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_...原创 2019-01-21 14:55:10 · 11820 阅读 · 2 评论 -
tensor 张量的学习
Tensor 张量,在 tf 中所有的数据都通过张量流来传输,在 tf 中张量的维数被描述为‘阶’,张量是以 list 的形式存储的,但不是 list ,list 中有几重括号,对应的张量就是几阶。t = [[1,2],[1,3]],就是一个二阶张量。实际上,一阶张量可以理解成向量,二阶张量是矩阵,但是张量的维度可以很高。三维张量可以理解成一系列的存储的二维张量,有三个坐标轴,也就是list里面套...原创 2019-01-20 19:05:19 · 660 阅读 · 0 评论 -
Keras 中自定义层
Keras中自定义层非常普遍。对于简单,无状态的自定义操作,可以通过 layers.core.Lambda层来实现。对于包含了可训练权重的自定义层,就需要自己手动去实现。需要实现三个方法:build(input_shape): 定义权重,这个方法必须设 self.built = True,可以通过调用 super([Layer],self).build( ) 完成。call( x ):...原创 2018-10-24 17:21:20 · 3017 阅读 · 0 评论 -
Inception 模块作用
增加网络深度和宽度的同时减少参数。Inception V1增加了网络的宽度,增加了网络对尺度的适应性,不同的支路的感受野是不同的,所以有多尺度的信息在里面。第二张图引入了1x1卷积主要是为减少了减参。Inception V2:加入了BN层,使每一层都规范化到一个N(0,1)的高斯,另一方面学习VGG使用2个3x3cobv代替inception模块中的5x5,降参,加...原创 2018-09-11 11:12:59 · 14851 阅读 · 0 评论 -
ResNet V1和V2的区别
原创 2018-09-11 10:54:43 · 4990 阅读 · 0 评论 -
Empirical Evaluation of Rectified Activation in Convoluation Network 激活函数的讨论
Empirical Evaluation of Rectified Activation in Convoluation Network对神经网络激活函数的经验评估Standard rectified linear unit relu 标准整流线单元 这是最常用的激活函数Leaky rectified linear unit lreluParametric r...原创 2018-07-21 20:57:27 · 726 阅读 · 0 评论 -
Batch Normalization
https://www.zhihu.com/question/283715823BN应该放在非线性激活层的前面还是后面?Deep Learning for Computer Vision with Python: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate...原创 2018-07-20 08:52:13 · 2164 阅读 · 0 评论 -
谷歌 机器学习速成课程
https://developers.google.com/machine-learning/crash-course/机器学习简介 框架处理监督式学习,通过学习如何组合输入信息来对从未见过的数据进行分类。 机器学习术语:标签特征:输入变量样本:数据的特定实例 有标签样本:labeled examples: {features, label}: ...原创 2018-07-18 22:42:04 · 1965 阅读 · 0 评论 -
GlobalAveragePooling对于fc的替代作用
现在做3D-CNN处理高光谱遥感影像的网络结构时,在模型的最后一层送入到分类器之类,习惯性的会加上一个GlobalAveragePooling3D(GAP)层,这个层对减少参数和降低过拟合风险有很大的作用,它实际上是对fc层的一个替换,在ALexNet,VGG上在分类器之前都会有fc层。GAP是没有参数的,但是fc层会引入大量的参数。GAP将最后一层的每个特征图进行一个平均池化操作,形成一个特征点...原创 2018-06-30 09:29:09 · 4012 阅读 · 1 评论 -
超参数和验证集
大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的。有时一个选项被设为学习算法不用学习的超参数,是因为它太难优化了。更多的情况是该选项必须是超参数,是因为它不适合在训练集上学习。这适用于控制模型容量的所有超参数。如果在训练集上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合。为了解决这个问题,我们需要一个训练算法观测不到的验证集样本...原创 2018-06-28 10:15:59 · 4554 阅读 · 1 评论 -
one-hot编码
在分类问题上,将label处理成one-hot编码格式是很通用的做法,什么是one-hot编码?就是将类别变量转换为机器学习算法易于利用的一种形式的过程。比如:上面这个公司对应四个标签值,类比值是成比例增加的,处理成one-hot编码格式:大家会发现VW从1变成了(1,0,0),时间上这各向量就是一组以类别作为长度,在每一类具体所在位置上标1.为什么处理成这样的格式呢?因为在输入数据时,假定类别值...原创 2018-06-22 12:33:52 · 5659 阅读 · 0 评论 -
深度学习中 “end to end” 网络
“end to end”理解起来就是端到端网络,现在我做高光谱遥感时,都会在论文里面加一句模型实现了端到端的网络,作为深度学习的一个优势提出来。端到端,其实就是从模型的输入端到输出端,不需要经过预处理或者后处理手段,原始数据进入网络输出结果。端到端网络统一了处理训练过程分类过程,全部交给网络来处理。传统方法处理高分辨率影像时,首先需要人工的设计特点,提取图像特征点,将提取的特征作为模型输入在送入分...原创 2018-06-22 12:00:30 · 1500 阅读 · 0 评论 -
深度学习实验的一些小知识点
遇到一条是一条,慢慢增加,怕搞忘了。。。。1.参数量过大也不好,容易过拟合。2.DenseNet每一个Dense中的混合函数输入的都是统一大小的通道数卷积特征图,有gr成长率控制,这是减少参数最重要的方法,每次输出来的都是一个固定大小的feature map,不像其他网络那样一层一层往后是增加的,DenseNet通过concat操作将信息一步一步往后传,又加大了信息流动,非常厉害的想法。生成24个...原创 2018-03-20 09:39:44 · 612 阅读 · 0 评论 -
模型集成方法
数据层面的集成方法:测试阶段数据扩充:以随机扣取为例,对某张测试图像可得到n张随机扣取图像,测试阶段只需用训练好的深度网络模型对n张图分别做预测,之后将预测的各类置信度平均作为该测试图像的最终预测结果即可。简易集成法:对于样本较多的类采取降采样,每次采样数依照样本数目最少的类别而定,这样每类取到的样本数是均等的。采样结束后,针对每次采样得到的子数据集训练模型,如此采样、训练反复多次。最后对测试数据...原创 2018-03-18 21:11:08 · 1566 阅读 · 0 评论 -
微调神经网络技巧
除了从头训练自己的网络,一种更有效,更好的方式就是微调已预训练好的网络模型,微调预训练模型简单点来说就是用目标任务数据在原先预训练的模型上继续训练的过程。这是非常实用的一个技巧:1.由于网络在原始数据上收敛,因此应该设置较小的学习率在目标数据集上微调,应该在10的负四次方以下。2.卷积神经网络浅层拥有更泛化的特征(如边缘、纹理等),深度特征则更抽象对应高层语义。因此,在新数据上微调时泛化特征更新可...原创 2018-03-18 16:48:43 · 7281 阅读 · 0 评论 -
深度学习中学习率的选择
learning rate是深度学习模型中进行训练的一个比较关键的因素,也是通常我们设计模型中基本都会讨论和实验的一个参数。 大家都知道,梯度具有方向和大小,反向传播中,梯度下降算法乘以一个称为学习速率的变量,以确定下一个点的位置。学习率设置过小,收敛速度会非常慢,学习率设置过大,则会越过最低点,无法达到最低点。 Lr的选择是纯粹的超参问题,实际上也就是try,不过你如果直...原创 2018-03-11 22:56:31 · 9692 阅读 · 0 评论 -
深度神经网络中损失函数的选择
损失函数是设计神经网络中很重要的一个关键因素,面对特定的问题,我们要设计不同的损失函数,比如我们参数kaggle比赛时,一般赛事举办者都会给出来一个损失函数。损失函数是模型对数据拟合程度的反映,拟合的越差,损失函数的值就应该越大,同时我们还期望,损失函数在比较大时,它对应的梯度也要比较大,这样的话更新变量就可以更新的更快一点。事实上,我们对损失函数的也就两个方面的要求,首先要能反映出你求解问题的真...原创 2018-03-11 22:17:54 · 9449 阅读 · 2 评论 -
深度学习中对输入数据进行归一化操作
归一化操作是深度学习模型输入数据之前要进行一项很重要的操作。在不同的评价指标中,量纲单位往往不同,变化区间处于不同的数量级,若不进行归一化,会导致某些指标被忽视,从而影响到数据分析的结果。归一化本身就是把你需要的数据经过一定的处理限制在一定的范围内。在统计学上,归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1,1之间是统计的坐标分布。在Inception...原创 2018-03-11 15:43:00 · 12615 阅读 · 0 评论 -
神经网络中concatenate和add层的不同
在网络结构的设计上,经常说DenseNet和Inception中更多采用的是concatenate操作,而ResNet更多采用的add操作,那么这两个操作有什么异同呢?concatenate操作是网络结构设计中很重要的一种操作,经常用于将特征联合,多个卷积特征提取框架提取的特征融合或者是将输出层的信息进行融合,而add层更像是信息之间的叠加。This reveals that both Dense...原创 2018-03-08 10:01:58 · 45065 阅读 · 13 评论 -
keras中TimeDistributed的用法
TimeDistributed这个层还是比较难理解的。事实上通过这个层我们可以实现从二维像三维的过渡,甚至通过这个层的包装,我们可以实现图像分类视频分类的转化。考虑一批32个样本,其中每个样本是一个由16个维度组成的10个向量的序列。该层的批输入形状然后(32, 10, 16)。可以这么理解,输入数据是一个特征方程,X1+X2+...+X10=Y,从矩阵的角度看,拿出未知数,就是10个向量,每个向...原创 2018-03-07 21:40:37 · 70818 阅读 · 20 评论 -
图像分类中max-pooling和average-pooling之间的异同
池化操作时在卷积神经网络中经常采用过的一个基本操作,一般在卷积层后面都会接一个池化操作,但是近些年比较主流的ImageNet上的分类算法模型都是使用的max-pooling,很少使用average-pooling,这对我们平时设计模型时确实有比较重要的参考作用,但是原因在哪里呢?通常来讲,max-pooling的效果更好,虽然max-pooling和average-pooling都对数据做了下采样...原创 2018-03-03 20:41:26 · 53116 阅读 · 1 评论 -
keras中对多张输入图片进行预测并返回预测结果
前面讨论过单张图片的输入和和预测,下面讨论一下多张图片同时输入模型的方法。对于多张图片的输入,将多张图片读入到一个列表中,然后concatenate起来,concatenate的作用是把shape为(0,224,224,3)的每张图片tensor,打包成shape为(batch,224,224,3)的tensor,实现批量的预测或者批量训练了。 代码如下: import nu...原创 2018-02-26 14:07:38 · 21366 阅读 · 9 评论 -
keras中对单一输入图像进行预测并返回预测结果
模型经过训练测试之后,我们往往用一两张图对模型预测结果进行分析讨论,那么下面介绍在keras中用已训练的模型经过测试的方法。下面是以利用预训练的ResNet来展示预测的效果,选了一张狗的图片,是来自一个kaggle比赛的。预测结果第一个是一种苏格兰品种的狗,我也不知道准不准 == 。import numpy as npfrom keras.applications.imagenet_utils ...原创 2018-02-26 12:54:49 · 19289 阅读 · 9 评论