![](https://img-blog.csdnimg.cn/20210303110828613.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
快乐ML/DL
文章平均质量分 84
机器学习/深度学习理论与实战
我是大黄同学呀
要相信光
展开
-
记录我の秋招之旅【23届 CV算法岗】
记录我的2023秋招之旅,最终上岸阿里巴巴CV算法岗原创 2022-12-21 23:49:08 · 1278 阅读 · 15 评论 -
如何正确地计算神经网络模型的推理时间【含代码,以pytorch为例】
无论是做学术还是做工程项目,实际推理时间()总是我们衡量一个模型好坏的重要参照指标。目前已经也有很多博客在介绍如何计算一个神经网络模型的推理时间,但是写得都比较"粗糙",在看了一些国内外的博客后,对这个问题有了一些总结性的经验,故写下这篇博客。某些博客直接将python程序的测速方式用到神经网络模型的测速中来(使用计时),这忽略了深度学习问题的特殊性(在GPU上进行推理)。直接使用这种方式进行测速会忽略两个关键问题,导致测出来的速度不准:① 异步执行;② GPU预热。...原创 2022-06-05 22:34:25 · 17691 阅读 · 13 评论 -
【机器学习经典算法】K近邻(KNN):核心与总结
KNN算法的主要核心以及算法总结,包括KD树的构建与搜索原创 2022-02-16 22:12:20 · 5469 阅读 · 0 评论 -
初探“谱聚类”算法(无公式)
本文不会设计到数学公式的推导,而是从抽象层面对谱聚类进行叙述,并介绍几个改进的算法。试图给读者留有一些印象,了解谱聚类的基本概念、特性,在以后需要的时候可以进行尝试。原创 2021-12-21 17:05:22 · 3460 阅读 · 0 评论 -
Pytorch:浅探Tensor的各种索引形式
文章目录前因各种Tensor索引操作1. 简单索引2. 一般的花式索引3. 复杂的花式索引4. Informer代码示例前因之前一直以为对ndarray的各种索引切片操作还算得上熟悉,但今天师弟问了我Informer实现中ProbSparse Self-Attention的一些Tensor索引操作,才发现有些操作还不太懂,而网上也缺乏相关的参考资料。因此在一系列探索下,写下了这篇博客。各种Tensor索引操作构造示例数组x,为一个三维tesnor:import torchx = torch.ar原创 2021-12-18 12:03:00 · 6587 阅读 · 4 评论 -
多模态特征融合机制(含代码):TFN(Tensor Fusion Network)和LMF(Low-rank Multimodal Fusion)
文章目录写在前面简单的concatTFN融合策略论文全称:《Tensor Fusion Network for Multimodal Sentiment Analysis》《Efficient Low-rank Multimodal Fusion with Modality-Specific Factors》写在前面最近在做一个分类的比赛,想要用上数据中的多模态信息(主要是文本和图像特征),因此探索了一些多模态特征的融合机制,并记录下来。下文中均以3种不同模态下的特征融合为例。并设A模态特征原创 2021-09-27 21:57:49 · 29664 阅读 · 42 评论 -
Pytorch:交叉熵损失(CrossEntropyLoss)以及标签平滑(LabelSmoothing)的实现
浅谈Label SmoothingLabel Smoothing也称之为标签平滑,其实是一种防止过拟合的正则化方法。传统的分类loss采用softmax loss,先对全连接层的输出计算softmax,视为各类别的置信度概率,再利用交叉熵计算损失。 在这个过程中尽可能使得各样本在正确类别上的输出概率为1,这要使得对应的z值为+∞,这拉大了其与其他类别间的距离。现在假设一个多分类任务标签是[1,0,0],如果它本身的label的出现了问题,这对模型的伤害是非常大的,因为在训练的过程中强行学习一个非本原创 2021-07-03 12:07:22 · 25564 阅读 · 30 评论 -
Pytorch:快速求得NxN矩阵的主对角线(diagonal)元素与非对角线元素
前因今天写代码过程中,要分别求得一个N x NTensor矩阵的主对角元素与非对角元素,看到一个巧妙的写法,故记录下来。探索torch.diagonal()主对角元素很好得到,Pytorch有现成的API可调用,为torch.diagonal,详情如下:使用起来也很方便,示例如下:x = torch.randn(4,4)# tensor([[ 0.9148, 0.1396, -0.8974, 2.0014],# [ 0.1129, -0.3656, 0.4371, 0原创 2021-06-07 23:06:55 · 6135 阅读 · 6 评论 -
VAE:变分自编码器的理解与实现
VAE理解与实现文章目录VAE理解与实现1. 理解VAE2. 模型实现3. 代码4. 总结1. 理解VAEVAE是一类生成模型,其假设在低维空间(维度k,k<d)中存在一个关于输入X(维度d)的真实概率分布:pgt(x)p_{gt}(x)pgt(x)。现考虑一个与X相关的潜在变量z(维度d),z的分布为p(z)p(z)p(z),通常也称之为先验分布(通常为正态分布),因此可重写概率分布pgt(x)p_{gt}(x)pgt(x):先验分布是我们事先设定的,已知的从上式我们可以明白原创 2021-05-20 21:06:44 · 1872 阅读 · 7 评论 -
一文弄懂Batch Norm / Layer Norm / Instance Norm / Group Norm 归一化方法
文章目录前因总览Batch NormalizationLayer NormalizationInstance NormalizationGroup Normalization最终总结参考前因Normalization现在已经成了神经网络中不可缺少的一个重要模块了,并且存在多种不同版本的归一化方法,把我们秀得头晕眼花,其本质都是减去均值除以方差,进行线性映射后,使得数据满足某个稳定分布,如下图所示: 出于更好地理解与区分这些方法, 写下本文。总览如果不理解此图,可以先看后面的小节,再来会看这幅图原创 2021-04-25 12:35:02 · 11020 阅读 · 2 评论 -
谈谈Pytorch中的转置卷积 nn.ConvTranspose2d
起因在之前的博客中,已经在理论层面上介绍过转置卷积,但一直没有在代码中真正应用过,因为目前在图像分割领域中的上采样操作通常直接用双线性插值来做了。最近探索AutoEncoder,在解码器中要用到转置卷积,涉及到了编码,发现pytorch的实际操作以及参数设置上并没有那么简单,因此写下本文记录一下。探索关于什么是转置卷积,参照我上节给出的博客,这里就不过多叙述了。直接上pytorch实操:conv = nn.Conv2d(3, 8, 3, stride=2, padding=1)Dconv = nn原创 2021-04-10 12:35:06 · 11314 阅读 · 1 评论 -
谈谈距离度量方式:欧氏距离与余弦距离
前因在机器学习/深度学习的很多任务中,我们通常会面临着两个样本之间相似度的比较。通常常用的两种度量方式为欧氏距离与余弦距离,那么在什么时候用欧氏距离?什么时候用余弦相似度?他们之间的联系与区别在哪里呢?探索在机器学习当中,通常以一组向量来表示样本如上图所示,欧式距离是通过勾股定理来计算两个向量之间的距离:余弦距离是计算两个向量之间夹角的余弦值:通常用1-D(x,y)来表示余弦相似度。分析:首先谈谈区别,欧氏距离的范围是不确定的(没有经过归一化),得到的值可能很大(最原创 2021-04-02 23:05:17 · 8425 阅读 · 4 评论 -
谈谈softmax中常出现的温度系数 T (τ)
浅谈Softmax出现的温度系数T原创 2021-03-16 22:23:26 · 20034 阅读 · 11 评论 -
数据集预处理:图像等比例缩放并填充
需求描述输入一张图像,长宽不限。先要对其进行等比例缩放使得最长边为x,并且将图像进行填充,使得最后图像尺寸为[x, x]。例:处理前:期望处理后(缩放并填充为128x128):代码主要依赖库:cv2语言:python传入img与fixed_side,其中img为cv2所读取的图像,fixed_side为期望的边长xdef ResziePadding(img, fixed_side=128): h, w = img.shape[0], img.shape[1]原创 2020-12-16 21:39:54 · 3134 阅读 · 1 评论 -
Pytorch:几行代码轻松实现Warm up + Cosine Anneal LR
Warm up 浅谈warm up是深度学习炼丹时常用的一种手段,由于一开始参数不稳定,梯度较大,如果此时学习率设置过大可能导致数值不稳定。使用warm up有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳,其次也有助于保持模型深层的稳定性。详见 https://www.zhihu.com/question/338066667/answer/771252708torch.optim.lr_scheduler.LambdaLRpytorch给我们提供了很多调整学习率的原创 2021-02-23 23:13:05 · 21480 阅读 · 26 评论 -
Pytorch:提取网络中某些层的输出
目的我们通常在构建网络时,会使用一些比较成熟的网络构建backbone,比如ResNet、MobieNet等等。但有些时候并不需要使用整个backbone,而只需要其中某些层的输出,但自己构建一边backbone又很麻烦。本文主要介绍这种方法就可以很方便地从一个已经搭建好的网络中方便地提取到某些层的输出。IntermediateLayerGetter方法参考自torchvision的实现,代码与注释如下:class IntermediateLayerGetter(nn.ModuleDict):原创 2021-01-29 21:03:22 · 9123 阅读 · 16 评论 -
torch.pairwise_distance(): 计算特征图之间的像素级欧氏距离
文章目录torch.pairwise_distance(x1, x2)使用示例1使用示例2正确性检查程序1程序2torch.pairwise_distance(x1, x2)这个API可用于计算特征图之间的像素级的距离,输入x1维度为[N,C,H,W],输入x2的维度为[M,C,H,W]。可以通过torch.pairwise_distance(x1, x2)来计算得到像素级距离。其中要求N==M or N==1 or M==1这个API我在官方文档没有搜到,而是在通过一篇文章的github源码偶原创 2021-01-04 21:02:50 · 21918 阅读 · 20 评论 -
PyTorch:构建线性回归模型
文章目录写在前面代码import依赖库数据生成导入数据构建模型定义优化器和损失函数模型训练检验参考写在前面之前写过一篇博客,是不基于任何深度学习框架的纯numpy实现,其实整个过程比较繁琐。而深度学习框架能够提供给很多便利,避免一些重复性的工作,也使得代码变得更加简洁。本文主要是基于Pytorch框架实现一个线性回归模型。基于numpy的线性回归模型构建:波士顿房价预测——线性模型(numpy实现)代码import依赖库import torchimport torch.nn as nnfro原创 2020-08-01 21:48:45 · 1616 阅读 · 0 评论 -
Pytorch:迁移学习时使用部分预训练模型
文章目录应用场景如何下载常用的预训练模型1. 按照源码设置相应的参数:2. 复制所需部分的模型参数3. 打印参数验证应用场景通常在一些现实任务中,我们所能拿到的数据比较少,而深度学习模型的参数更新通常需要大量的数据来驱动,所以我们就可以对某些层用到预训练模型。如何下载常用的预训练模型通常在Pytorch的github上可以找到torchvision一些模型源码(比如VGG,ResNet,G...原创 2020-03-10 16:12:08 · 2344 阅读 · 0 评论 -
Pytorch:探讨Dropout
文章目录Dropout是什么?有什么用?测试?训练?PyTorch测试Dropout是什么?有什么用?在我另外一篇解读AlexNet网络的博文中,我提到了Dropout被Alex用来防止模型过拟合:Dropout就是把隐藏层中神经元的输出设置为0,每个神经元被Dropout概率为r(这是个超参数,在这个网络中r=0.5),这些被‘dropout’掉的神经元不会参与前向计算和后向传播。每次输入...原创 2020-03-05 22:46:11 · 2857 阅读 · 6 评论 -
Pytorch——使用单/多个GPU训练模型
文章目录1.设置CUDA_VISIBLE_DEVICES2.定义device,并将模型移植到GPU上3.在训练里,传入模型数据移植到GPU上代码示例服务器上实际训练效果:1.设置CUDA_VISIBLE_DEVICES# 若使用服务器多卡训练import os# 指定对程序可见的GPU编号# 表示只有第1,2,3块GPU可见,其他GPU不可用,并且第1块GPU编号已经变成第0块os.e...原创 2020-02-25 13:08:36 · 2094 阅读 · 0 评论 -
PyTorch:学习(踩坑)记录
文章目录本文目的1.PyTorch中的CrossEntropyLoss本文目的记录Pytorch使用过程中的经验,避免再次踩坑,保持更新ing…1.PyTorch中的CrossEntropyLoss官方API:class torch.nn.CrossEntropyLoss(weight=None, size_average=True)调用时参数:input : 包含每个类的得分,2-D...原创 2020-02-24 16:57:19 · 879 阅读 · 0 评论 -
Pytroch:实现几种常用的滤波器(高斯滤波 + 边缘检测)
卷积核(滤波器)及其特征映射github地址代码github地址代码# 介绍几种常用的卷积核import torchimport torch.nn as nnimport matplotlib.pyplot as pltimport cv2import numpy as npimg = cv2.imread('picture.jpg')img = cv2.cvtColo...原创 2020-02-21 15:55:41 · 7489 阅读 · 0 评论 -
PyTorch:解决异或问题XOR
试设计一个前馈神经网络来解决XOR问题该前馈神经网络具有两个隐藏神经元和一个输出神经元github地址[https://github.com/Classmate-Huang/nnFramework/blob/master/EasyPytorch/XOR.py]代码# 利用Pytorch解决XOR问题import torchimport torch.nn as nnimport to...原创 2020-02-20 17:44:46 · 3465 阅读 · 0 评论 -
Paddlepaddle/Pytorch:利用卷积核实现边缘检测和均值模糊
飞桨API信息:https://www.paddlepaddle.org.cn/documentation/docs/zh/api_cn/dygraph_cn/Conv2D_cn.htmlPyTorchAPI信息:https://www.pytorchtutorial.com/docs/package_references/torch-nn/#class-torchnnconv2din95...原创 2020-02-18 10:21:05 · 1660 阅读 · 0 评论 -
Pytorch:实现图像分类 VGG & ResNet(以猫狗数据集为例)
文章目录准备数据集模型文件 VGG_hc.py训练 train.ipynb测试文件 Test.pyGitHub地址:准备数据集我是用的torchvision.datasets.ImageFolder加载的数据,就把数据集分成如下形式:猫狗数据集里有25000张train数据,12500张test数据;我从train数据中随机抽取4000张图像作为val数据集。import torchv...原创 2020-03-17 16:08:49 · 12450 阅读 · 57 评论 -
Pytorch:训练一个简单的分类器(torchvision的使用)
文章目录CIFAR数据集Jupyter代码如下加载数据定义模型训练网络并保存模型加载模型并测试结果评估结果github地址将模型放到多卡服务器上训练CIFAR数据集CIFAR10 dataset是一个是个类别的数据集,类别包括:‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘tr...原创 2020-02-25 21:55:34 · 1576 阅读 · 0 评论 -
利用Numpy解决波士顿房价预测
数据准备下载数据集:https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data代码实现参考百度 AI Studio实现代码1梯度下降import numpy as npimport matplotlib.pyplot as pltdef load_data(): # 导入房价...原创 2020-01-31 20:42:37 · 1657 阅读 · 0 评论 -
解决模型加载的路径问题“No such file or directory”
问题描述—— model model.py —— checkpoints Epoch99.pthtest.pymode.py文件中利用torch.load(checkpoints/Epoch99.pth)调用模型在test.py中加载模型出错,明明位置上存在该文件,但是一直提示“No such file or directory: ‘checkpoints/Epoch99.pth’”。原因分析这主要是因为运行的主程序test.py与模型加载所在文件model.py的相对路径以及发生原创 2020-12-16 20:54:48 · 33834 阅读 · 6 评论 -
图解梯度下降-BP算法
文章目录参考依据Chain RuleBackpropagationForward PassBackward Passcase 1case 2总结参考依据李宏毅《深度学习》https://www.bilibili.com/video/BV1JE411g7XF?p=13Chain Rule简单的链式法则,是反向传播唯一用到的数学基础:Backpropagation要计算一个节点的梯度(损失函数对w求偏导:∂C/∂w),可以利用chain rule将式子进行转换(∂C/∂w = ∂C/∂z * ∂原创 2020-07-23 16:07:04 · 900 阅读 · 0 评论 -
循环神经网络RNN:Recurrent Neural Network
文章目录给网络增加记忆能力应用到机器学习序列到类别模式同步的序列到序列模式异步的序列到序列模式参数学习时间反向传播算法实时循环学习算法算法比较Bi-RNNLSTMLong-term dependenciesThree gateLSTM for RNNProblem of TrainingLSTM for handle gradient vanishingGRU参考在前馈神经网络(CNN也属于前馈神经网络)中,信息的传递是单向的,前馈神经网络可以看作是一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于原创 2020-07-31 21:29:25 · 1260 阅读 · 0 评论 -
谈谈对Adagrad和尺度归一化的一些理解
文章目录参考视频Adaptive Learning RatesAdagradFeature Scaling参考视频参考自:李宏毅Machine Learning P5(Gradient Descent),在此基础上融入一些自己的理解:https://www.bilibili.com/video/BV1JE411g7XF?p=5Adaptive Learning RatesLearning Rate对于机器学习/深度学习来说,都是一个非常重要的超参数。如果过大,Model将无法收敛,过小,Model原创 2020-07-16 18:09:14 · 857 阅读 · 2 评论 -
图像数据集预处理:计算数据集RGB各通道的均值、方差/标准差
文章目录参考目的计算原理Python实现参考https://www.cnblogs.com/liugl7/p/10874958.html参考上文的原理以及框架,在其基础上做了一定的修改及提炼目的我们在做图像领域的任务或者项目时,通常需要对图像进行归一化处理,使输入网络的数据呈现一个稳定的分布。这就需要我们求得图像各通道(R、G、B)的均值以及方差。计算原理一般计算方差和均值需要两步,...原创 2020-04-04 22:28:13 · 11840 阅读 · 11 评论 -
Batch Normalization 批归一化是什么? 有什么用?
文章目录有什么用?原理是什么,怎么计算?怎么用?有什么用?批归一化(Batch Normalization,BatchNorm)是由Ioffe和Szegedy于2015年提出的,目前已被广泛应用在深度学习中,其目的是对神经网络中间层的输出进行标准化处理,使得中间层的输出更加稳定。什么意思呢?就是这些专家认为啊,模型的收敛需要稳定的数据分布。什么叫稳定的数据分布呢?以图像处理为例...原创 2020-03-05 19:13:48 · 1269 阅读 · 0 评论 -
谈谈Deconvolution(转置卷积) Atrous convolution(空洞卷积) Depthwise separable convolution(深度可分离卷积)
文章目录转置卷积(deconvolution)微步卷积空洞卷积(膨胀卷积)转置卷积(deconvolution)转置卷积是一个将低维特征转换到高维特征。为什么叫做转置卷积呢?其实就是引入了转置的思想。假设我们现在有一个p维的向量Z,然后有个d维的向量X,p<d.这样就会出现 Z = W·X,其中W的维度为(p,d),叫做转换矩阵.现在,我们要从Z通过相似的方法来得到X,这样我们不...原创 2020-03-04 11:51:14 · 2532 阅读 · 1 评论