![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DeepLearning学习
文章平均质量分 69
我是一颗棒棒糖
研一下饭狗
展开
-
pytorch 训练模型很慢,卡在数据读取,卡I/O的有效解决方案
pytorch 训练模型很慢,卡数据读取,卡磁盘数据集i/o的解决方案原创 2022-10-26 11:10:47 · 4122 阅读 · 1 评论 -
pytorch model.train() 和model.eval() 对 BN 层的影响
代码】pytorch model.train() 和model.eval() 对 BN 层的影响。原创 2022-08-17 23:12:51 · 622 阅读 · 0 评论 -
Batch Normalization、Layer Normalization、Group Normalization、Instance Normalization原理、适用场景和实际使用经验
Batch Normalization、Layer Normalization、Group Normalization、Instance Normalization原理、适用场景和使用经验原创 2022-06-08 21:57:20 · 1475 阅读 · 1 评论 -
使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作
使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作总共分为四步构造一个my_dataset类,继承自torch.utils.data.Dataset重写__getitem__ 和__len__ 类函数建立两个函数find_classes、has_file_allowed_extension,直接从这copy过去建立my_make_dataset函数用来构造(path,lable)对一、构造一个my_dataset类,继承自torch.utils.data.Data原创 2022-03-13 23:01:34 · 4020 阅读 · 0 评论 -
pytorch单机多卡的正确打开方式 以及可能会遇到的问题和相应的解决方法
pytorch 单机多卡的正确打开方式pytorch 使用单机多卡,大体上有两种方式简单方便的 torch.nn.DataParallel(很 low,但是真的很简单很友好)使用 torch.distributed 加速并行训练(推荐,但是不友好)首先讲一下这两种方式分别的优缺点nn.DataParallel优点:就是简单缺点就是:所有的数据要先load到主GPU上,然后再分发给每个GPU去train,注意这时候主GPU的显存占用很大,你想提升batch_size,那你的主GPU就会限制原创 2022-03-11 23:45:43 · 12476 阅读 · 10 评论 -
python 实现 CRC 冗余码的方法
python 实现 CRC 冗余码的方法我这里考虑输入是 torch.Tensor的一个 只包含0 ,1 元素的张量对于输入是numpy或者0,1字符串的方法就更简单了,总之都先要将输入处理成为 0,1字符串,例如“1010”首先构造一个输入:import randoma = [1 for i in range(16)]b = [0 for i in range(16)]a.extend(b)random.shuffle(a)a = np.array(a)a = torch.Ten原创 2021-12-06 22:42:10 · 1918 阅读 · 0 评论 -
pytorch 使用DataParallel 单机多卡和单卡保存和加载模型时遇到的问题
首先很多网上的博客,讲的都不对,自己跟着他们踩了很多坑1.单卡训练,单卡加载这里我为了把三个模块save到同一个文件里,我选择对所有的模型先封装成一个checkpoint字典,然后保存到同一个文件里,这样就可以在加载时只需要加载一个参数文件。保存:states = { 'state_dict_encoder': encoder.state_dict(), 'state_dict_decoder': decoder.state_dict(), }torch.s原创 2021-11-12 22:15:59 · 3758 阅读 · 0 评论 -
ViT(Vision Transformer)学习
ViT(Vison Transformer)学习Paper:An image is worth 16×16 words: transformers for image recognition at scale. In ICLR, 2021.Transformer 在 NLP领域大放异彩,并且随着模型和数据集的不断增长,仍然没有表现出饱和的迹象。这使得使用更大规模的数据对Transformer结构进行训练得到表现更优的模型成为了一种解决问题的方案。受 NLP 中 Transformer 成功的启发,作者尝原创 2021-07-01 15:45:11 · 1247 阅读 · 0 评论 -
character-level OCR之Character Region Awareness for Text Detection(CRAFT) 论文阅读
Character Region Awareness for Text Detection 论文阅读论文地址(arXiv) ,pytorch版本代码地址最近在看一些OCR的问题,CRAFT是在场景OCR中效果比较好的模型,记录一下论文的阅读已有的文本检测工作大致如下:基于回归的文本检测(Regression-based text detectors):TextBoxes、DMPNet .etc,运用通用目标检测方法到文本检测中。基于分割的文本检测(Segmentation-based text原创 2021-06-29 15:14:00 · 519 阅读 · 0 评论 -
pytorch中的squeeze和unsqueeze
pytorch中的squeeze和unsqueezeunsqueeze即在参数指定的维度位置,增加一个维度(就是在第几个“[”的位置增加一个“[”)import torcha = torch.arange(0,8)print(a)b = a.view(2,4)print(b)b = b.unsqueeze(1)print(b)tensor([0, 1, 2, 3, 4, 5, 6, 7])tensor([[0, 1, 2, 3], [4, 5, 6, 7]])ten原创 2021-03-15 08:52:24 · 487 阅读 · 0 评论 -
pytorch-多GPU训练(单机多卡、多机多卡)
pytorch-多GPU训练(单机多卡、多机多卡)pytorch 单机多卡训练首先是数据集的分布处理需要用到的包:torch.utils.data.distributed.DistributedSamplertorch.utils.data.DataLoadertorch.utils.data.DatasetDistributedSampler这个包我们用来确保dataloader只会load到整个数据集的一个特定子集,为每一个子进程划分出一部分数据集,以避免不同进程之间数据重复。而我们构造原创 2021-03-13 09:58:35 · 1886 阅读 · 0 评论 -
pytorch-LSTM的输入和输出尺寸
LSTM的输入和输出尺寸CLASS torch.nn.LSTM(*args, **kwargs)Applies a multi-layer long short-term memory (LSTM) RNN to an input sequence.For each element in the input sequence, each layer computes the following function:对于一个输入序列实现多层长短期记忆的RNN网络,对于输入序列中的每一个元素,LSTM的原创 2021-01-19 10:21:20 · 5814 阅读 · 1 评论 -
pytorch-word2vec的实例实现
word2vec的实例实现实现词嵌入word2vec中的跳字模型和近似训练中的负采样以及二次采样(subsampling),在语料库上训练词嵌入模型的实现。首先导入实验所需的包或模块。import collectionsimport mathimport randomimport sysimport timeimport osimport numpy as npimport torchfrom torch import nnimport torch.utils.data as Dat原创 2021-01-17 15:26:51 · 1291 阅读 · 1 评论 -
深度学习-自然语言处理中的近似训练
自然语言处理中的近似训练跳字模型的核心在于使用softmax运算得到给定中心词wcw_cwc来生成背景词wow_owo的条件概率P(wo∣wc)=exp(uo⊤vc)∑i∈Vexp(ui⊤vc).P(w_o \mid w_c) = \frac{\text{exp}(\boldsymbol{u}_o^\top \boldsymbol{v}_c)}{ \sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)}.原创 2021-01-15 15:31:24 · 479 阅读 · 1 评论 -
深度学习-词嵌入(word2vec)
词嵌入(word2vec)自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元。顾名思义,词向量是用来表示词的向量,也可被认为是词的特征向量或表征。把词映射为实数域向量的技术也叫词嵌入(word embedding)。近年来,词嵌入已逐渐成为自然语言处理的基础知识。跳字模型跳字模型假设基于某个词来生成它在文本序列周围的词。举个例子:假设文本序列是“the”“man”“loves”“his”“son”以“loves”作为中心词,设背景窗口大小为2如下图所示,跳字模型所关心的是原创 2021-01-15 14:43:17 · 371 阅读 · 1 评论 -
pytorch深度学习-机器视觉-目标检测和边界框简介
机器视觉之目标检测和边界框简介在图像分类任务里,我们假设图像里只有一个主体目标,并关注如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。在计算机视觉里,我们将这类任务称为目标检测(object detection)或物体检测。目标检测在多个领域中被广泛使用。例如,在无人驾驶里,我们需要通过识别拍摄到的视频图像里的车辆、行人、道路和障碍的位置来规划行进线路。机器人也常通过该任务来检测感兴趣的目标。安防领域则需要检测异常目标,如歹徒或原创 2021-01-15 09:01:52 · 1513 阅读 · 1 评论 -
pytorch深度学习-微调(fine tuning)
微调(fine tuning)首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户。一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然后在收集到的图像数据集上训练一个分类模型。这个椅子数据集虽然可能比Fashion-MNIST数据集要庞大,但样本数仍然不及ImageNet数据集中样本数的十分之一。这可能会导致适用于ImageNet数据集的复杂模型在这个椅子数据集上过拟合。同时,因为数据量有限,最终训练得到的模型的精度也可能达不到实用的要求。原创 2021-01-14 20:06:38 · 1703 阅读 · 3 评论 -
深度学习-计算机视觉--图像增广
图像增广大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。原创 2021-01-11 16:15:42 · 964 阅读 · 1 评论 -
pytorch多GPU计算
pytorch多GPU计算如果正确安装了NVIDIA驱动,我们可以通过在命令行输入nvidia-smi命令来查看当前计算机上的全部GPU定义一个模型:import torchnet = torch.nn.Linear(10, 1).cuda()netoutput:Linear(in_features=10, out_features=1, bias=True)要想使用PyTorch进行多GPU计算,最简单的方法是直接用torch.nn.DataParallel将模型wrap一下即可:n原创 2021-01-02 17:49:48 · 976 阅读 · 1 评论 -
深度学习-自动并行计算
自动并行计算异步计算默认情况下,PyTorch中的 GPU 操作是异步的。当调用一个使用 GPU 的函数时,这些操作会在特定的设备上排队但不一定会在稍后立即执行。这就使我们可以并行更多的计算,包括 CPU 或其他 GPU 上的操作。一般情况下,异步计算的效果对调用者是不可见的,因为每个设备按照它们排队的顺序执行操作在 CPU 和 GPU 之间或两个 GPU 之间复制数据时,PyTorch会自动执行必要的同步操作。因此,计算将按每个操作同步执行的方式进行。 可以通过设置环境变量CUDA_LAU原创 2021-01-02 17:15:34 · 1040 阅读 · 1 评论 -
pytorch命令式和符号式混合编程
命令式和符号式编程命令式编程命令式编程使用编程语句改变程序状态,如下:def add(a, b): return a + bdef fancy_func(a, b, c, d): e = add(a, b) f = add(c, d) g = add(e, f) return gfancy_func(1, 2, 3, 4) # 10在运行语句e = add(a, b)时,Python会做加法运算并将结果存储在变量e中,从而令程序的状态发生改变。类似地原创 2021-01-02 17:05:58 · 507 阅读 · 1 评论 -
深度学习优化算法-Adam算法
Adam算法Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。Adam算法可以看做是RMSProp算法与动量法的结合。算法内容Adam算法使用了动量变量vt\boldsymbol{v}_tvt和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量st\boldsymbol{s}_tst,并在时间步0将它们中每个元素初始化为0。给定超参数0≤β1<10 \leq \beta_1 < 10≤β1<1(算法作者建议设为0.9)时间步t原创 2021-01-02 11:28:26 · 2407 阅读 · 0 评论 -
深度学习优化算法-AdaDelta算法
AdaDelta算法除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进 [1]。不一样的是,AdaDelta算法没有学习率这个超参数。 它通过使用有关自变量更新量平方的指数加权移动平均的项来替代RMSProp算法中的学习率。AdaDelta算法也像RMSProp算法一样,使用了小批量随机梯度gt\boldsymbol{g}_tgt按元素平方的指数加权移动平均变量st\boldsymbol{s}_tst。在时间步0原创 2021-01-02 11:17:30 · 4885 阅读 · 2 评论 -
深度学习-参数与超参数
参数(parameters)/模型参数由模型通过学习得到的变量比如权重、偏置超参数(hyperparameters)/算法参数根据经验进行设定,影响到权重和偏置的大小比如迭代次数、隐藏层的层数、每层神经元的个数、学习速率等...原创 2021-01-02 11:02:45 · 314 阅读 · 0 评论 -
深度学习优化算法:RMSProp算法
RMSProp算法在AdaGrad算法中,因为调整学习率时分母上的变量st\boldsymbol{s}_tst一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。为了解决这一问题,RMSProp算法对AdaGrad算法做了一点小小的修改。算法内容之前说过指数加权移动平均。不同于AdaGrad算法里状态变量st\boldsymb原创 2021-01-02 10:58:10 · 9340 阅读 · 0 评论 -
深度学习AdaGrad算法
AdaGrad算法在一般的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。例如,假设目标函数为fff,自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1,x2]⊤,该向量中每一个元素在迭代时都使用相同的学习率。例如,在学习率为η\etaη的梯度下降中,元素x1x_1x1和x2x_2x2都使用相同的学习率η\etaη来自我迭代:x1←x1−η∂f∂x1,x2←x2−η∂f∂x2. x_1 \leftarrow x_1 - \eta \fra原创 2021-01-02 10:45:24 · 4412 阅读 · 2 评论 -
动量法解决梯度下降的一些问题
动量法目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向,因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。梯度下降的问题考虑一个目标函数:输入为二维向量x=[x1,x2]⊤\boldsymbol{x} = [x_1, x_2]^\topx=[x1,x2]⊤输出为标量f(x)=0.1x12+2x22f(\bold原创 2020-12-25 22:24:19 · 734 阅读 · 1 评论 -
小批量随机梯度下降
小批量随机梯度下降在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降(batch gradient descent)。随机梯度下降在每次迭代中只随机采样一个样本来计算梯度。可以在每轮迭代中随机均匀采样多个样本来组成一个小批量,然后使用这个小批量来计算梯度。下面就来描述小批量随机梯度下降设目标函数f(x):Rd→Rf(\boldsymbol{x}): \mathbb{R}^d \rightarrow \mathbb{R}f(x):Rd→R。在迭代开始前的时间原创 2020-12-25 17:05:04 · 7444 阅读 · 0 评论 -
pytorch实现梯度下降、随机梯度下降-图像直观展示
深度学习的优化算法的原理与作用原创 2020-12-25 10:44:23 · 1291 阅读 · 2 评论 -
(pytorch-深度学习)双向循环神经网络
双向循环神经网络一般,我们认为循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。给定时间步ttt的小批量输入Xt∈Rn×d\boldsymbol{X}_t \in \mathbb{R}^{n \times d}Xt∈Rn×d(样本数为nnn,输入个数为原创 2020-12-24 23:05:43 · 834 阅读 · 0 评论 -
(pytorch-深度学习)深度循环神经网络
深度循环神经网络循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。下图演示了一个有LLL个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。具体来说在时间步ttt里,设小批量输入Xt∈Rn×d\boldsymbol{X}_t \in \mathbb{R}^{n \times d}Xt∈Rn×d(样本数为nnn,输入个数为ddd)第ℓ\ellℓ隐藏层(ℓ=1,…,L\ell=1,\ldo原创 2020-12-21 18:42:07 · 425 阅读 · 0 评论 -
(pytorch-深度学习)长短期记忆(LSTM)
长短期记忆(LSTM)LSTM 中引入了3个门,即输入门(input gate)遗忘门(forget gate)输出门(output gate)以及与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成一种特殊的隐藏状态),从而记录额外的信息。输入门、遗忘门和输出门与门控循环单元中的重置门和更新门一样,如下图所示长短期记忆的门的输入均为当前时间步输入Xt\boldsymbol{X}_tXt与上一时间步隐藏状态Ht−1\boldsymbol{H}_{t-1}Ht−1输出由激活函数为s原创 2020-12-21 17:18:46 · 1014 阅读 · 1 评论 -
(pytorch-深度学习)门控循环单元(GRU)
门控循环单元(GRU)循环神经网络中的梯度计算,当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。通常由于这个原因,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。门控循环神经网络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可以学习的门来控制信息的流动。其中,门控循环单元(gated recurrent unit,GRU)是原创 2020-12-21 09:28:53 · 2329 阅读 · 0 评论 -
(pytorch-深度学习)通过时间反向传播
通过时间反向传播介绍循环神经网络中梯度的计算和存储方法,即通过时间反向传播(back-propagation through time)。正向传播和反向传播相互依赖。正向传播在循环神经网络中比较直观,而通过时间反向传播其实是反向传播在循环神经网络中的具体应用。我们需要将循环神经网络按时间步展开,从而得到模型变量和参数之间的依赖关系,并依据链式法则应用反向传播计算并存储梯度。定义模型考虑一个简单的无偏差项的循环神经网络,且激活函数为恒等映射(ϕ(x)=x\phi(x)=xϕ(x)=x)。设时间原创 2020-12-19 23:07:13 · 769 阅读 · 1 评论 -
(pytorch-深度学习)使用pytorch框架nn.RNN实现循环神经网络
使用pytorch框架nn.RNN实现循环神经网络首先,读取周杰伦专辑歌词数据集。import timeimport mathimport numpy as npimport torchfrom torch import nn, optimimport torch.nn.functional as Fimport syssys.path.append("..") import d2lzh_pytorch as d2ldevice = torch.device('cuda' if to原创 2020-12-19 15:15:08 · 2332 阅读 · 1 评论 -
(pytorch-深度学习)循环神经网络的从零开始实现
循环神经网络的从零开始实现首先,我们读取周杰伦专辑歌词数据集:import timeimport mathimport numpy as npimport torchfrom torch import nn, optimimport torch.nn.functional as Fimport syssys.path.append("..") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')原创 2020-12-17 11:21:35 · 914 阅读 · 0 评论 -
(pytorch-深度学习)SE-ResNet的pytorch实现
SE-ResNet的pytorch实现残差块:class Resiual_block(nn.Module): def __init__(self, in, middle_out, out, kernel_size=3, padding=1): self.out_channel = middle_out super(Resiual_block, self).__init__() self.shortcut = nn.Sequenti原创 2020-11-20 10:23:39 · 2755 阅读 · 3 评论 -
(pytorch-深度学习)循环神经网络
循环神经网络上一节介绍的nnn元语法中,时间步ttt的词wtw_twt基于前面所有词的条件概率只考虑了最近时间步的n−1n-1n−1个词。如果要考虑比t−(n−1)t-(n-1)t−(n−1)更早时间步的词对wtw_twt的可能影响,我们需要增大nnn。但这样模型参数的数量将随之呈指数级增长。本节将介绍循环神经网络。它并非刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之前时间步的信息。首先我们回忆一下前面介绍过的多层感知机,然后描述如何添加隐藏状态来将它变成循环神经网络。...原创 2020-11-01 20:11:33 · 664 阅读 · 1 评论 -
(pytorch-深度学习)语言模型-学习笔记
语言模型自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为TTT的文本中的词依次为w1,w2,…,wTw_1, w_2, \ldots, w_Tw1,w2,…,wT,那么在离散的时间序列中:wtw_twt(1≤t≤T1 \leq t \leq T1≤t≤T)可看作在时间步(time step)ttt的输出或标签。给定一个长度为TTT的词的序列w1,w2,…,wTw_1, w_2, \ldots, w_Tw1,w2,…,wT,语言模原创 2020-10-31 19:51:03 · 269 阅读 · 0 评论 -
(pytorch-深度学习)实现稠密连接网络(DenseNet)
稠密连接网络(DenseNet)ResNet中的跨层连接设计引申出了数个后续工作。稠密连接网络(DenseNet)与ResNet的主要区别在于在跨层连接上的主要区别:ResNet使用相加DenseNet使用连结ResNet(左)与DenseNet(右):图中将部分前后相邻的运算抽象为模块AAA和模块BBB。DenseNet里模块BBB的输出不是像ResNet那样和模块AAA的输出相加,而是在通道维上连结。这样模块AAA的输出可以直接传入模块BBB后面的层。在这个设计里,模块AAA相当于原创 2020-10-31 19:20:27 · 1607 阅读 · 0 评论