pytorch知识
文章平均质量分 62
以动手学pytorch为基准,总结pytorch知识
你回到了你的家
这个作者很懒,什么都没留下…
展开
-
pytorch autograd.grad
pytorch是动态图,即计算图的搭建和运算是同时的,随时可以输出结果;而tensorflow是静态图。在pytorch的计算图里只有两种元素:数据(tensor)和运算(operation)运算包括:加减乘除、开方、幂指对、三角函数等可求导运算。数据可分为:叶子节点和非叶子节点;叶子节点是用户创建的节点,不依赖其他节点;叶子节点和非叶子节点的区别在于反向传播结束后,非叶子节点的梯度会被释放掉,只保留叶子节点的梯度,这样就节省了内存。如果想要保留非叶子节点的梯度,可以使用retain_grad()方法原创 2022-03-14 19:37:51 · 2522 阅读 · 2 评论 -
torch nn模块API介绍
CrossEntropyLoss类原型:torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean', label_smoothing=0.0)这个criterion计算input和target之间的交叉熵损失。It is useful when training a classification problem with原创 2022-03-17 00:15:06 · 234 阅读 · 0 评论 -
论文相关补充知识
str的使用实验中对于T2T模型使用了str(model),输出结果如下:原创 2022-03-15 11:20:04 · 589 阅读 · 0 评论 -
pytorch模块函数API介绍
sqrt函数原型:torch.sqrt(input, *, out=None) → Tensor这个函数返回输入input的开方:outi=inputiout_i=\sqrt{input_i}outi=inputi参数:input (Tensor):输入tensorkeyword参数:out (Tensor, optional):输出tensor使用示例:>>> a = torch.randn(4)>>> atensor([-2.0原创 2021-10-27 16:38:25 · 160 阅读 · 0 评论 -
pytorch中hook的使用
在pytorch中,可以利用Hook获取、改变网络中间某一层变量的值和梯度,从而便捷地分析网络,而不用专门改变网络结构。一、torch.Tensor中的hook在使用pytorch时,只有叶节点(即直接指定数值的节点,而不是由其他变量计算得到的节点,比如网络输入)的梯度会保留,其余中间节点梯度在反向传播完成后就会自动释放以节省显存。比如:import torchx=torch.Tensor([1,2]).requires_grad_(True)y=torch.Tensor([3,4]).req原创 2021-10-12 17:11:21 · 542 阅读 · 0 评论 -
pytorch梯度的自动求取
一、概念如果将Tensor的属性.requires_grad属性设置为True,它将开始追踪在其上的所有操作(主要目的是利用链式法则进行梯度传播)。完成计算后,可以调用.backward()方法来完成所有梯度计算。此Tensor的梯度将累计到.grad属性中。注意在y.backward()时,如果y是标量,则不需要为backward()传入任何参数;否则,需要传入一个与y同形的Tensor。这为了避免向量(甚至更高维张量)对张量求导,而转换成标量对张量求导。举个例子,假设形状为m×nm\times nm原创 2021-10-11 19:18:14 · 271 阅读 · 0 评论 -
动手学PyTorch知识点汇总
2.2.5 Tensor和numpy相互转换我们很容易用numpy()和from_numpy()将Tensor和Numpy中的数组相互转化。但是需要注意的一点是:这两个函数所产生的Tensor和Numpy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另外一个也会改变。还有一个常用的将Numpy中的array转换成Tensor的方法就是torch.tensor()。需要注意的是,此方法总是会进行数据拷贝(就会消耗更多的时间和空间),所以返回的Tensor和原来的数据不再共享内存。num原创 2021-09-08 10:17:33 · 661 阅读 · 0 评论 -
神经网络卷积层以及池化层介绍
一、二维卷积层池化层的提出是为了缓解卷积层对位置的过度敏感性。一、二维最大池化层和平均池化层同卷积层⼀样,池化层每次对输⼊数据的⼀个固定形状窗⼝(⼜称池化窗⼝)中的元素计算输出。不同于卷积层⾥计算输⼊和核的互相关性,池化层直接计算池化窗⼝内元素的最⼤值或者平均值。该运算也分别叫做最⼤池化或平均池化。在⼆维最⼤池化中,池化窗⼝从输⼊数组的最左上⽅开始,按从左往右、从上往下的顺序,依次在输⼊数组上滑动。当池化窗⼝滑动到某⼀位置时,窗⼝中的输⼊⼦数组的最⼤值即输出数组中相应位置的元素。下图展示了池化窗口形原创 2021-09-29 09:04:59 · 6675 阅读 · 0 评论 -
Pytorch数据的读取与存储
在实际中,我们有时需要把训练好的模型部署到很多不同的设备。这种情况下我们需要将内存训练好的模型参数存储在硬盘上供后续读取使用。一、读写Tensor我们可以直接使用save函数和load函数分别存储和读取Tensor。save使用Python的pickle模块将对象进行序列化,然后将序列化的对象保存到disk,使用save可以保存各种对象。包括模型、张量和字典等。而load使用pickle unpickle工具将pickle的对象文件反序列化为内存。下面的例子创建了Tensor变量x,并将其存在文件名同原创 2021-09-28 20:27:14 · 1775 阅读 · 0 评论 -
Pytorch模型构造方法
一、继承Module类来构造模型Module类是nn模块里提供的一个模型构造类,是所有神经网络模块的基类,如下所示,继承这个类需要重载Module类中的__init__函数和forward函数,它们分别用于创建模型参数和定义前向计算(正向传播)。继承时无需定义反向传播函数,因为系统将通过自动求梯度而自动生成反向传播所需的backward函数。...原创 2021-09-28 16:54:26 · 310 阅读 · 0 评论 -
Pytorch模型参数的访问、初始化和共享
首先定义一个含单隐藏层的多层感知机,使用默认方法初始化它的参数,并做一次前向运算。import torchfrom torch import nnfrom torch.nn import initnet=nn.Sequential(nn.Linear(4,3),nn.ReLU(),nn.Linear(3,1))#此时Pytorch会进行默认初始化print(net)X=torch.rand(2,4)Y=net(X).sum()输出:Sequential( (0): Linear原创 2021-09-28 10:55:53 · 559 阅读 · 0 评论 -
Pytorch中DataLoader相关操作
在实践中,数据读取经常是训练的性能瓶颈,特别当模型简单或者计算硬件性能较高时。Pytorch的DataLoader中一个很方便的功能是允许使用多进程来加速数据读取。具体使用时设定其中的num_workers参数来指定读取数据的进程数。...原创 2021-09-27 23:36:17 · 151 阅读 · 0 评论 -
pytorch和GPU有关操作(CUDA)
使用GPU前,我们首先需要查看GPU信息,这可以通过如下命令实现:watch nvidia-smi输出如下:可以看到总共有两块3090显卡。一、设定计算设备默认情况下Pytorch将数据创建在内存,然后利用CPU进行计算,所以我们我们需要手动设定GPU信息。接下来介绍几个相关指令查看GPU是否可用:torch.cuda.is_available()查看GPU数量:torch.cuda.device_count()查看当前GPU索引号(从0开始):torch.cuda.current_de原创 2021-09-27 10:40:24 · 1770 阅读 · 0 评论