深度学习
深度学习爱好者的交流平台
绛洞花主敏明
研究生在读,喜欢刺激有挑战。
展开
-
关于出书这件事
推荐原创 2022-12-05 10:06:41 · 309 阅读 · 0 评论 -
图卷积神经网络个人理解
一、简介在学习卷积神经网络的目标检测或分类过程中,很多卷积网络开始逐渐开始融合,不再局限于一种卷积神经网络的单独使用,这种结合的好处是可以通过不同的卷积操作提取图像或者标签之间存在的特征信息,并加以学习,最终呈现出更好的识别效果。本章中主要着重从深度学习中的卷积神经操作逐渐引导至图卷积神经网络,主要的推导过程在该博客下方给出链接,想要了解其数学推理过程的可以进一步进行学习研究,本文中主要从个人理解的角度进行推理,方便入门者快速理解。二、什么是卷积神经网络理解卷积神经网络需要首先了解核函数。博客为ht原创 2020-08-01 13:41:18 · 689 阅读 · 0 评论 -
深度解析卷积神经网络中的卷积操作
学习过信号处理的人知道,信号上的卷积操作是通过一个信号旋转后再在信号上进行移动逐渐得到重叠后的新信号。与图像上的卷积操作不同,图像上的卷积操作实际上是图像的感受野与卷积核进行加权和,终其原因是因为,数学上的卷积操作与图像上的卷积操作不同。一、数学中的卷积数学中的卷积操作分为两种,一种是连续函数进行卷积操作。另外一种是离散卷积操作。图像中由于是离散的点,以下将着重介绍离散卷积操作的详细步骤。1、准备工作矩阵的卷积准备一共是分为两个,一个是待处理矩阵X;一个是3x3的卷积核。卷积核的矩阵如下;待处原创 2020-08-01 11:21:46 · 2010 阅读 · 0 评论 -
局部最优与鞍点问题
一、什么是局部最优与鞍点初学深度学习,总是担心优化算法会困在极差的局部最优。本文介绍如何正确看待局部最优以及深度学习中的优化问题。如上图,平面的高度就是损失函数。在图中似乎各处都分布着局部最优。梯度下降法或者某个算法可能困在一个局部最优中,而不会抵达全局最优。但是,问题的关键在于,低维特征(图示两维)让我们对局部最优产生误解。事实上,如果你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。一个具有高维度空间的函数,如果梯度为0,那么在每个方向,原创 2020-06-26 12:05:53 · 6974 阅读 · 2 评论 -
可变形卷积网络
1、什么是可变形卷积?可变形卷积是指卷积核在每一个元素上额外增加了一个参数方向参数,这样卷积核就能在训练过程中扩展到很大的范围。注意:这里有一个非常非常非常容易混淆的点,所谓的deformable,到底deformable在哪?很多人可能以为deformable conv学习的是可变形的kernel,其实不是不是不是!本文并不是对kernel学习offset而是对feature的每个位置学习一个offset。(a)是传统的标准卷积核,尺寸为3x3(图中绿色的点);(b)就是我们今天要谈论的可变形卷原创 2020-06-19 11:49:43 · 2661 阅读 · 0 评论 -
反卷积(Transposed Convolution)详细推导
1、什么是反卷积?上采样(Upsample)在应用在计算机视觉的深度学习领域,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(e.g.:图像的语义分割),这个采用扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。反卷积(Transposed Convolution)上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化转载 2020-06-07 14:51:37 · 6030 阅读 · 14 评论 -
卷积原理:几种常用的卷积(标准卷积、深度卷积、组卷积、扩展卷积、反卷积)
0、标准卷积默认你已经对卷积有一定的了解,此处不对标准卷积细讲。举个例子,假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么32个卷积核一共需要(3×3×16)×32 =4068个参数。1、深度卷积转载 2020-06-05 15:06:46 · 3734 阅读 · 0 评论 -
空洞卷积(dilated convolution)理解
1、简介Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilat转载 2020-06-05 11:17:52 · 851 阅读 · 0 评论 -
PyTorch 更新模型参数以及并固定该部分参数(二)
大家在学习pytorch时,可能想利用pytorch进行fine-tune,但是又烦恼于参数的加载问题。下面我将讲诉我的使用心得。Step1: 加载预训练模型,并去除需要再次训练的层注意:需要重新训练的层的名字要和之前的不同。model=resnet()#自己构建的模型,以resnet为例model_dict = model.state_dict()pretrained_dict = torch.load('xxx.pkl')pretrained_dict = {k: v for k, v in转载 2020-05-25 10:30:52 · 3012 阅读 · 0 评论 -
PyTorch 更新模型参数以及并固定该部分参数(一)
1. PyTorch 预训练模型Pytorch 提供了许多 Pre-Trained Model on ImageNet,仅需调用 torchvision.models 即可,具体细节可查看官方文档。往往我们需要对 Pre-Trained Model 进行相应的修改,以适应我们的任务。这种情况下,我们可以先输出 Pre-Trained Model 的结构,确定好对哪些层修改,或者添加哪些层,接着,再将其修改即可。比如,我需要将 ResNet-50 的 Layer 3 后的所有层去掉,在分别连接十个分类器转载 2020-05-25 10:23:40 · 11112 阅读 · 2 评论 -
pytorch中model.to(device)和map_location=device的区别
一、简介在已训练并保存在CPU上的GPU上加载模型时,加载模型时经常由于训练和保存模型时设备不同出现读取模型时出现错误,在对跨设备的模型读取时候涉及到两个参数的使用,分别是model.to(device)和map_location=devicel两个参数,简介一下两者的不同。将map_location函数中的参数设置 torch.load()为 cuda:device_id。这会将模型加载到给定的GPU设备。调用model.to(torch.device('cuda'))将模型的参数张量转换为CUD转载 2020-05-25 10:08:15 · 6058 阅读 · 3 评论 -
CAM方法获取显著图:基于pytorch的实现
CAM方法获取显著图:基于pytorch的实现1、下载代码2、具体代码(1)导入需要的模块(2)具体代码详解(3)生成结果转:CAM实践:基于pytorch的使用方法原文地址:https://cloud.tencent.com/developer/article/13709371、下载代码git clone https://github.com/metalbubble/CAM文件夹下有一个pytorch_CAM.py的文件,利用这个便可以生成CAM了。2、具体代码(1)导入需要的转载 2020-05-21 00:36:28 · 503 阅读 · 0 评论 -
深度学习之-核函数理解
1、入门在了解之前先从一个小的例子入手。问题如下:在一个平面上存在四个点。两个点为红色,两个点为绿色,实现对点的分割有两个方法。一种在平面上寻找一种合适的非线性函数。一种是引入第三维度,实现特征从低纬度到高纬度的分类。首先使用第一种方法,通过对上述的分析,本文中分别给出三种方程。对结果进行分析,判断哪个函数可以更好的分开图中的两类别的点。给出的函数分别为x+y、x*y、x**2三种,将点代入公式中可见。函数 \ 坐标0,31,22,13,0x+y3333原创 2020-05-17 14:15:39 · 1979 阅读 · 0 评论 -
【Pytorch】建网络的四种方法
转载:https://www.cnblogs.com/denny402/p/7593301.html准备:import torchimport torch.nn.functional as Ffrom collections import OrderedDict方法1:# Method 1 -----------------------------------------class Net1(torch.nn.Module): def __init__(self):转载 2020-05-14 20:54:17 · 217 阅读 · 0 评论 -
PyTorch实现的ResNet50、ResNet101和ResNet152
PyTorch实现的ResNet50、ResNet101和ResNet152PyTorch: https://github.com/shanglianlm0525/PyTorch-Networksimport torchimport torch.nn as nnimport torchvisionimport numpy as npprint("PyTorch Version: ",torch.__version__)print("Torchvision Version: ",torchv转载 2020-05-14 20:51:06 · 1547 阅读 · 1 评论 -
pytorch 创建网络的8种方法
import torch.nn as nnfrom torch.nn import Conv2dfrom collections import OrderedDictclass net1(nn.Module): def __init__(self): super(net1, self).__init__() self.conv1 = Conv2d(3, 3, 1) self.conv2 = Conv2d(3, 3, 1) def f转载 2020-05-14 20:42:07 · 420 阅读 · 0 评论 -
基于PyTorch的自动梯度理解及实例
一、简介pytorch中有个有用的模块,叫做自动梯度,它可以自动计算张量的梯度,其原理是自动跟踪张量的全部操作,然后对其进行反向的每一步操作。二、操作过程实现过程需要首先告诉张量要执行自动梯度的操作。第一步: 创建一个张量,并告诉张量,需要跟踪梯度。代码:x = torch.randn(2, 2, requires_grad=True)print(x)输出:第二步: 接着对张量进行操作,输出结果中参数PowBackward0已经记录了上次操作是进行的幂运算,其后的0表示第一次的幂操作。原创 2020-05-11 18:06:22 · 743 阅读 · 0 评论 -
PyTorch里面的torch.nn.Parameter()
转载地址:https://www.jianshu.com/p/d8b77cc02410在刷官方Tutorial的时候发现了一个用法self.v = torch.nn.Parameter(torch.FloatTensor(hidden_size)),看了官方教程里面的解释也是云里雾里,于是在栈溢网看到了一篇解释,并做了几个实验才算完全理解了这个函数。首先可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可以训练的类型parameter并将这个parameter绑定到这个module里转载 2020-05-11 17:42:02 · 2533 阅读 · 0 评论 -
使用tensorflow2.0的深度学习方法拟合函数
1、拟合函数需要拟合的函数为摄氏度与华氏度的转换,转化的代码如下:def C2F: F = C*1.8+32 return Fprintf(C2F(38))100.42、深度学习代码废话不多说,直接上代码:import tensorflow as tfimport numpy as npfeature = np.array([0, 8, 15, 22], dtype=float)labels = np.array([32, 46.4, 59, 71.6], dtype=floa原创 2020-05-09 18:15:27 · 1369 阅读 · 0 评论 -
[PyTorch] 基于Python和PyTorch的MNIST的手写数字数据集的分类
讲解MNIST的介绍好比编程入门有 Hello World,机器学习入门有 MNIST 。MNIST的官方网址:THE MNIST DATABASE of handwritten digits而本博客中MNIST的介绍部分的图片来自 MNIST介绍简单来说,MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。其中训练集包括60000张图片,测试集包括10000张图片。训练集和测试集的划分非常重要。在机器学习模型设计时必须有一个单独的测试集(不用于训练而是用来评估这个模型的性能),转载 2020-05-09 17:00:53 · 844 阅读 · 0 评论 -
PyTorch中的view的用法
在PyTorch中view函数作用为重构张量的维度,相当于numpy中的resize()的功能,但是用法不太一样import torchtt1=torch.tensor([-0.3623,-0.6115,0.7283,0.4699,2.3261,0.1599])则tt1.size()为torch.Size([6]),是一个一行的tensor。现在通过view可以将其重构一下形状。result=tt1.view(3,2)resulttensor([[-0.3623, -0.6115],转载 2020-05-09 14:54:26 · 554 阅读 · 0 评论 -
Pytorch中 torch.squeeze() 和torch.unsqueeze()的相关用法
unsqueeze:扩充数据维度,在0起的指定位置N加上维数为1的维度squeeze: 维度压缩,在0起的指定位置N,去掉维数为1的的维度torch.unsqueeze() 这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度torch.squ转载 2020-05-09 14:45:56 · 1012 阅读 · 0 评论 -
深度学习的优化器总结
深度学习(一般指深度神经网络DNN)有几个关键的要素:训练集,网络结构,损失函数(目标函数),优化方法。这里记录一下优化方法相关知识点吧。为什么使用优化器训练DNN时,我们的目标是更新网络参数以使得损失函数最小化,optimizer就是更新参数的方法。不同的optimizer都遵循一个基本原则:是学习率,也就是每次参数更新的程度。根据是否改变学习率,可以将optimizer分为两大派别。2. 学习率固定的optimizer1) BGD:Batch gradient descent,即在整个训练集转载 2020-05-09 11:38:57 · 637 阅读 · 1 评论 -
pytorch实现手写字的代码
废话不多说,直接上代码。import torchfrom torchvision import datasets, transformsfrom torch import nn as nnfrom torch import optimtransform = transforms.Compose([transforms.ToSensor(), transforms.Normalize((0.5, ), (0.5, ))])dataloader = torch.utils.data.DataLo原创 2020-05-09 11:30:08 · 543 阅读 · 0 评论 -
Pytorch搭建简易神经网络(五)——optimizer优化器
在网络的训练阶段,都主要到了定义了一个优化器我们都采用的随机梯度下降的优化方式,来实现整个网络的优化与回归,但是在实际中,有很多的优化方式,在Pytorch中文文档中关于优化器就给了我们详细的解释[1]torch.optim是一个实现了各种优化算法的库。大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法为了使用torch.optim,你需要构建一个opti...转载 2020-05-04 16:31:34 · 813 阅读 · 0 评论 -
Pytorch搭建简单神经网络(三)——快速搭建、保存与提取
在之前的两篇文章中分别介绍了如何用pytorch搭建简单神经网络用于回归与分类。但是如何快速搭建一个简单的神经网络而不是定义一个类再去调用,以及我们定义了一个网络并训练好,该如何在日后去调用这个网络去实现相应的功能。1、其他的相关代码import torchimport torch.nn as nnimport torch.nn.functional as Fimport matplot...转载 2020-05-04 16:21:34 · 405 阅读 · 0 评论 -
Pytorch搭建简单神经网络(二)——分类
Pytorch搭建简单神经网络(一)简单介绍了回归,本文将简单和大家分享一下搭建一个简单的分类网络1、导包import torchimport torch.nn as nnimport torch.nn.functional as Fimport matplotlib.pyplot as pltfrom torch.autograd import Variable2、生成数据n_...转载 2020-05-04 16:13:51 · 2728 阅读 · 2 评论 -
Pytorch搭建简单神经网络(一)——回归
Pytorch是一个开源的Python机器学习库,基于Torch神经网络主要分为两种类型,分类和回归,下面就自己学习用Pytorch搭建简易回归网络进行分享首先导入需要用的一些包import torchimport torch.nn as nnimport torch.nn.functional as Fimport matplotlib.pyplot as pltfrom torc...转载 2020-05-04 16:08:22 · 1254 阅读 · 0 评论 -
AlexNet网络结构分析及pytorch代码
这篇论文在2012年发表,文章中的模型AlexNet,参加的竞赛是ImageNet LSVRC-2010,该ImageNet数据集有1.2 million幅高分辨率图像,总共有1000个类别。测试集分为top-1和top-5,并且分别拿到了37.5%和17%的error rates,CNN重新引起人们的关注。下面就AlexNet做一下简要的分析。也是记录一下今天一天的学习。1、AlexNet的特...转载 2020-05-04 00:42:22 · 956 阅读 · 1 评论 -
深度学习之-非极大值抑制NMS、softNMS、DIoUNMS
1、NMS(非极大值抑制)非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。由下图可见,同一个物体可能有好几个框,我们的目标是一个物体只须保留一个最优的框:于是我们就要用到非极大值抑制,来抑制那些冗余的框: 抑制的过程是一个迭代-遍历-消除的过程。NMS python实现代码:def cpu_nums(dets...转载 2020-05-02 15:36:13 · 3889 阅读 · 0 评论 -
深度学习之-激活函数总结
1、Sigmoid函数Sigmoid 是常用的非线性的激活函数,它的数学形式如下:Sigmoid的几何图像如下:特点:它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.缺点:sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些 缺点。缺点1:在深度神经网络中梯度反向传递时...原创 2020-05-02 15:26:51 · 624 阅读 · 0 评论 -
BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm
1、综述1.1 论文链接1、Batch Normalizationhttps://arxiv.org/pdf/1502.03167.pdf2、Layer Normalizaitonhttps://arxiv.org/pdf/1607.06450v1.pdf3、Instance Normalizationhttps://github.com/DmitryUlyanov/texture_...转载 2020-05-02 13:20:28 · 224 阅读 · 0 评论 -
深度学习-Normalization之Cross-Iteration Batch Normalization
对msra的工作都比较关注,最近刚好看到了这篇对传统bn进行改进的论文。论文地址:https://arxiv.org/abs/2002.05712github地址:https://github.com/Howal/Cross-iterationBatchNormopenreview:https://openreview.net/forum?id=BylJUTEKvB作者应该是投ICLR杯...转载 2020-05-02 11:29:07 · 1810 阅读 · 0 评论 -
残差连接(skip connect)/(residual connections)
1、残差连接想必做深度学习的都知道skip connect,也就是残差连接,那什么是skip connect呢?如下图上面是来自于resnet【1】的skip block的示意图。我们可以使用一个非线性变化函数来描述一个网络的输入输出,即输入为X,输出为F(x),F通常包括了卷积,激活等操作。当我们强行将一个输入添加到函数的输出的时候,虽然我们仍然可以用G(x)来描述输入输出的关系,但是这...转载 2020-05-02 09:40:30 · 36626 阅读 · 5 评论 -
backbone、head、neck等深度学习中的术语解释
我们在阅读文章的时候,经常看到backbone、 head 、 neck 这一类的术语,但是我们可能并不知道是什么意思,这篇文章就是对这些术语进行解释:backbone:翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?翻译的很好,主干部分,哈哈哈哈,文字游戏了哈。这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使...转载 2020-05-01 15:12:39 · 5385 阅读 · 0 评论 -
深度学习之-Dropout
为了应对神经网络很容易过拟合的问题,2014年 Hinton 提出了一个神器,**Dropout: A Simple Way to Prevent Neural Networks from Overfitting **(original paper: http://jmlr.org/papers/v15/srivastava14a.html)实验结果:dropout 是指在深度学习网络的...转载 2020-05-01 14:03:03 · 2736 阅读 · 0 评论 -
深度学习之候选框的选取
在目标检测、目标跟踪领域,提取region proposal都是最基本环节。本文概述了从 sliding window 到 selective search, 然后升级到 region proposal network的过程。 核心在于理解 selective search算法 和 region proposal network的设计思想。1. 从sliding window 到 selecti...转载 2020-02-08 17:56:53 · 5261 阅读 · 6 评论 -
深度学习笔记——全连接层
1.概观卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。因为用到了所有的局部特征,所以叫全连接。全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。2.全连接层的理解——...转载 2019-12-24 17:20:19 · 3261 阅读 · 0 评论 -
卷积神经网络CNN理解
卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成一、卷积神经网络的基本概念其对应的公式如下:其中Layer L1是输入层,Layer L2是隐藏层(在卷积网络中也可以认为是卷积层),hwb是激活函数。激活函数激活函数是计算神经网络中的非常重要的一环,激活函数增加了神经网络模型的非线性特征,倘若神经网络中不存在激活函数,那么无论神经网络的深度有多少层,最终均是...原创 2018-12-23 17:12:15 · 857 阅读 · 1 评论 -
BN(Batch Normalization)讲解
本文转载自:http://blog.csdn.net/shuzfan/article/details/50723877本次所讲的内容为Batch Normalization,简称BN,来源于《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,是一篇很好的pap...转载 2019-01-04 09:46:33 · 822 阅读 · 0 评论