![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Pytorch
guofei_fly
这个作者很懒,什么都没留下…
展开
-
[Pytorch] spatial dropout的实现
dropout是神经网络中一种常用的正则化技术,其通过随机失活神经元元素,降低单元之间的相互依赖关系,从而降低过拟合的风险。实验表明,在Embedding层和CNN层后直接使用常规的dropout策略,效果并不显著,其原因可能:完全随机的dropout的无序性有损于神经元间的空间关联性,从而降低其捕捉特征的能力。因此学者们提出了一种在某些轴上完全dropout的策略,即spatial dropout。以Embedding层(张量维度为batch*timesteps*embedding)后的dropout为原创 2020-09-13 14:04:52 · 3104 阅读 · 0 评论 -
【Pytorch】记录自定义DataLoader时一个易犯的隐性错误
Mark下在自定义DataLoader时犯的一个隐性错误,最后还是通过阅读源码发现了症结。场景:根据一个dataframe自定义DataLoader原始数据:import pandas as pdimport randomdf = pd.DataFrame({'feature':[[random.randint(0, 5) for _ in range(5)] for _ in ran...原创 2020-04-07 09:40:12 · 2204 阅读 · 3 评论 -
【Pytorch】各网络层的默认初始化方法
在模型权重的初始化函数一文中,已经介绍了常见的网络权重初始化方法,本文再分下在pytorch源码中,对各网络层的默认初始化策略。在pytorch的所有自带网络层中,均通过reset_parameters函数在初始化网络Parameters:1. FC层weight参数采用了He-uniform初始化策略,而bias采用了简单的均匀分布初始化策略(均匀分布参数根据特征数计算)def rese...原创 2020-03-26 08:34:25 · 8257 阅读 · 2 评论 -
【Pytorch】基于torch.autograd.Function类自定义网络层
torch.autograd.Function是pytorch中用于自定义张量操作函数的类,通过实现forward和backward方法分别定义前向计算和反向求导过程,从而实现自定义网络层在整个动态流图中计算的传递。先贴一张官方说明:在自定义时,主要遵循如下流程和原则:(1)forward和backward均为静态方法,其第一个参数必须为ctx(官方示例,可自定义名称)上下文管理器变量。在...原创 2020-03-26 08:18:24 · 1156 阅读 · 1 评论 -
【Pytorch】max函数
在Pytorch中,取张量中的最大值,可以对某个张量t直接使用t.max(),或者采用顶级函数torch.max(t)实现。仔细查看这两个函数,会发现其实两者在适用性上而言并不相同,本文通过例子来进行分析。1. tensor.max()函数2. torch.max()函数...原创 2020-03-20 15:18:34 · 1356 阅读 · 0 评论 -
【Pytorch】RNN网络中pack和pad操作实践
在详解RNN网络中文本的pack和pad操作中曾介绍了pack和pad的相关机制和相关函数的基本用法,本文在前文基础上,通过实例来进一步演示文本数据张量在整个计算过程中的变化。1. 不进行pack操作的示例import torchimport torch.nn as nna = torch.tensor([[1,0], [4,5]]) # B*Ltorch.manual_see...原创 2020-03-20 00:18:16 · 476 阅读 · 0 评论 -
【Pytorch】index_select和gather函数的对比
在Pytorch中,index_select和gather均是被用于张量选取的常用函数,但其区别巨大,本文通过实例来介绍这种差异性。原创 2020-02-26 19:53:14 · 4869 阅读 · 0 评论 -
【Pytorch】对比clone、detach以及copy_等张量复制操作
pytorch提供了clone、detach、copy_和new_tensor等多种张量的复制操作,尤其前两者在深度学习的网络架构中经常被使用,本文旨在对比这些操作的差别。1. clone返回一个和源张量同shape、dtype和device的张量,与源张量不共享数据内存,但提供梯度的回溯。下面,通过例子来详细说明:示例:(1)定义import torcha = torch.ten...原创 2020-02-24 23:12:06 · 29589 阅读 · 7 评论 -
【Pytorch】对比expand和repeat函数
expand和repeat函数是pytorch中常用于进行张量数据复制和维度扩展的函数,但其工作机制差别很大,本文对这两个函数进行对比。1. expandtensor.expand(*sizes)expand函数用于将张量中单数维的数据扩展到指定的size。首先解释下什么叫单数维(singleton dimensions),张量在某个维度上的size为1,则称为单数维。比如zeros(2...原创 2020-02-23 21:29:08 · 6840 阅读 · 1 评论 -
【Pytorch】简析DataLoader中的collate_fn参数
如在博文数据批量化处理类Dataset和DataLoader中所介绍的一样,DataLoader可通过collate_fn参数,对Dataset生成的mini-batch的可迭代数据进行进一步处理,而本文就简要介绍下该参数,并给出一个简单的例子。1. collate_fn的设置、输入和输出collate_fn应当是一个可调用对象,常见的可以是外部定义的函数或者lambda函数。其接受DataL...原创 2020-02-18 23:02:53 · 3000 阅读 · 3 评论 -
【Pytorch】简析数据批量化处理类Dataset和DataLoader
在深度学习中,在将原始数据进行清理、规范化和编码后,就需要将数据进行序列化和批量化,而Pytorch提供这两项功能的类分别为Dataset和DataLoader。1. Dataset类Dataset类是将数据进行序列化封装的类,我们在为每个具体问题定制合适的Dataset子类时,仅需要继承该父类,同时覆写__init__、__getitem__和__len__三个魔鬼方法即可:__init...原创 2020-02-18 22:19:40 · 1022 阅读 · 0 评论 -
【Pytorch】自定义损失函数
在torch.nn中提供了诸多的损失函数,但有时需要根据实际问题自定义损失函数,其流程和自定义网络模型一样,通过继承nn.Module类,并提供前向计算forward方法,就可以像积木一样放入整体模型中,参与整个动态流图的计算。下面是一个简单的例子:import torchimport torch.nn.functional as F# 定义一个二元交叉熵损失函数class MyLos...原创 2020-02-18 20:47:08 · 882 阅读 · 0 评论 -
【Pytorch】BCELoss和BCEWithLogitsLoss损失函数详解
在Pytorch中,BCELoss和BCEWithLogitsLoss是一组常用的二元交叉熵损失函数,常用于二分类问题,其区别在于前者的输入为已进行sigmoid处理过的值,而后者为sigmoid函数11+exp(−x)\frac{1}{1+\exp(-x)}1+exp(−x)1中的xxx。下面为一个简单的示例:import torchimport torch.nn as nnpre...原创 2020-02-18 20:34:36 · 18825 阅读 · 5 评论 -
【Pytorch】scatter函数详解
在pytorch中,scatter是一个非常实用的映射函数,其将一个源张量(source)中的值按照指定的轴方向(dim)和对应的位置关系(index)逐个填充到目标张量(target)中,其函数写法为:target.scatter(dim, index, source)其中各变量及参数的说明如下:target:即目标张量source:即源张量dim:指定轴方向,即填充方式。对于二维...原创 2020-02-14 11:24:54 · 19770 阅读 · 18 评论 -
【Pytorch】模型权重的初始化函数
在神经网络模型中,参数权重的初始设置非常重要,其合理设置能够保证模型的收敛以及数值运算的速度。pytorch中常用的初始化函数封装在torch.nn.init下,常见策略主要包括:1. 均匀分布初始化"""a: 均匀分布下限b: 均匀分布上限返回同tensor同shape的初始化张量"""init.uniform_(tensor, a=0, b=1)2. 正态分布初始化"""...原创 2020-02-04 22:34:43 · 3292 阅读 · 0 评论 -
【Pytorch】torchtext的简单使用
自然语言处理的数据预处理过程主要包括如下步骤:(1)文本数据集的划分(训练集、验证集和测试集);(2)文本数据的导入;(3)分词;(4)词汇表的构建;(5)文本数据对于词汇表的编码和映射;(6)词向量的生成;(7)批文本数据的生成。torchtext是一个高效、有力的文本预处理库(其对NLP的作用类似于torchvision之于CV),提供了涵盖上述诸步骤的一站式文本预处理功能。其...原创 2020-02-04 14:32:45 · 5242 阅读 · 0 评论 -
【Pytorch】对比matual,mm和bmm函数
pytorch中提供了 matmul、mm和bmm等矩阵的乘法运算功能,但其具体计算细节和场景截然不同,应予以注意和区别。1. torch.mm该函数即为矩阵的乘法,torch.mm(tensor1, tenor2),参与计算的两个张量必须为二维张量(即矩阵),其结果张量out的维度关系满足:out(p×q)=t1(p×m)∗t2(m×q)out(p\times q)=t_1(p\times ...原创 2020-02-01 17:51:12 · 4179 阅读 · 0 评论 -
【Pytorch】控制上下文局部梯度更新
在模型的evaluation阶段和实际应用时,需要关闭pytorch自带的自动求导autograd机制,以防止验证/应用数据对网络参数的变动,同时减少自动求导带来的运算和存储消耗。其常见的控制场景包括:(1)禁止计算局部梯度(2)在禁止计算局部梯度中,允许更精细的局部梯度计算(3)根据判断条件,控制是否允许进行梯度更新下面分别就上述三个场景,介绍常用的写法。场景一:禁止计算局部梯度p...原创 2020-02-01 17:07:08 · 1601 阅读 · 0 评论 -
【Pytorch】对比CrossEntropyLoss与NLLLoss
CrossEntropyLoss(交叉熵损失)与NLLLoss(negative log likelihood,负对数似然损失)都是适用于分类问题,基于log似然损失,即交叉熵损失函数的实现方式,其体现了两个分布的近似程度:L(p,q)=−∑ipilogqiL(p,q)=-\sum_ip_i\log q_iL(p,q)=−i∑pilogqi对于分类问题,其只在真实所属类别kkk上的编码为1...原创 2020-01-31 10:48:17 · 675 阅读 · 0 评论 -
【Pytorch】详解RNN网络中文本的pack和pad操作
1. 引言RNN模型一般设定固定的文本长度(text sequence length,可理解为文本序列在时间维度上的步数 time step),以保证网络输出层数据维度的一致性。但在训练和测试时,难以保证输入文本长度的一致性,因此常常需要截断操作(即将超过预设长度的文本截断)和pad操作(即对不足预设长度的文本进行补0填充)。pad操作需满足:(1)pad后,不足预设长度的文本用相同特征维度的...原创 2020-01-21 13:41:09 · 3163 阅读 · 1 评论