
Pytorch
文章平均质量分 62
介绍Pytorch的使用方法
Wanderer001
AR/VR软件与硬件技术:图像增强、图像分类、语义分割、目标检测、目标跟踪、风格迁移、强化学习、三维重建、SLAM
展开
-
torchvision.transforms
我们在安装PyTorch时,还安装了,这是一个计算机视觉工具包。深度学习模型是由数据驱动的,数据的数量和分布对模型训练的结果起到决定性作用。所以我们需要对数据进行预处理和数据增强。下面是用数据增强,从一张图片经过各种变换生成 64 张图片,增加了数据的多样性,这可以提高模型的泛化能力。在中,我们对数据进行了一定的增强。当我们需要多个transforms操作时,需要作为一个list放在中。需要注意的是是把图片转换为张量,同时进行归一化操作,把每个通道 0~255 的值归一化为 0~1。原创 2023-11-02 14:34:27 · 86 阅读 · 0 评论 -
pytorch_lightning深入浅出
pytorch-lightning 的核心设计哲学是将 深度学习项目中的 研究代码(定义模型) 和 工程代码 (训练模型) 相互分离。最优模型默认保存在 trainer.checkpoint_callback.best_model_path 的目录下,可以直接加载。用户只需专注于研究代码(pl.LightningModule)的实现,而工程代码借助训练工具类(pl.Trainer)统一实现。下面我们使用minist图片分类问题为例,演示pytorch-lightning的最佳实践。原创 2023-08-30 16:09:37 · 447 阅读 · 0 评论 -
Pytorch预训练模型以及修改
pytorch中自带几种常用的深度学习网络预训练模型,torchvision.models包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用网络结构,并且提供了预训练模型,可通过调用来读取网络结构和预训练模型(模型参数)。往往为了加快学习进度,训练的初期直接加载pretrain模型中预先训练好的参数。加载model如下所示:impo...原创 2022-05-09 09:08:33 · 11964 阅读 · 1 评论 -
torch.utils.checkpoint
注意:在反向传播期间通过对每个检查分割运行一个前向传递分割来实现。这可能导致RNG状态等持久状态比没有检查点时更高级。默认情况下,检查点包含切换RNG状态的逻辑,这样使用RNG(例如通过dropout)的检查点通过与非检查点通过相比具有确定性的输出。根据检查点操作的运行时间,存储和恢复RNG状态的逻辑可能会导致适度的性能下降。如果不需要与非检查点传递相比的确定性输出,则向检查点或checkpoint_sequential提供preserve_rng_state=False,以省略每个检查点期间的RNG状原创 2022-05-04 09:00:03 · 1476 阅读 · 1 评论 -
torch.save
torch.save(obj, f, pickle_module=<module 'pickle' from '/opt/conda/lib/python3.6/pickle.py'>, pickle_protocol=2, _use_new_zipfile_serialization=False)[source]讲对象保存为磁盘文件。See also: Recommended approach for saving a model参数: obj – 保存对象 f –原创 2022-05-04 08:59:49 · 3178 阅读 · 0 评论 -
torch.no_grad
目录class torch.no_grad[source]class torch.no_grad[source]不能进行梯度计算的上下文管理器。当你确定你不调用Tensor.backward()时,不能计算梯度对测试来讲非常有用。对计算它将减少内存消耗,否则requires_grad=True。在这个模式下,每个计算结果都需要使得requires_grad=False,即使当输入为requires_grad=True。当使用enable_grad上下文管理器时这个模式不起作用。这个上下文管理器是原创 2022-05-04 08:59:35 · 4747 阅读 · 1 评论 -
pytorch报错RuntimeError: DataLoader worker (pid(s) xxx) exited unexpectedly
报错pytorch报错RuntimeError:DataLoader worker (pid(s) ... exited unexpectedly解决因为torch.utils.data.DataLoader中设置了num_works=4,也就是多线程读取。根据其他方法,我设置num_works=1或者num_works=0都不行。最后重装了pytorch,就可以了。pip install torch==1.5.1+cu101 torchvision==0.6.1+cu101 -原创 2022-03-07 14:23:49 · 17340 阅读 · 3 评论 -
Pytorch拟合任意函数
1、读入数据import randomimport numpy as npimport matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torch.nn.functional as Fx_train_list = []y_train_list = []for i in range(1, 50): x = i*random.choice([0.7,0.8,0.9]) y = i*random.ch原创 2022-02-22 11:01:03 · 879 阅读 · 3 评论 -
nn.GroupNorm()
函数作用当我们的输入不是1d,2d而是3d时(即五维时),代码如下:>>> input2=torch.randn(1,4,2,2,3) #输入维度为5维(b,c,l,h,w)>>> nnnn=nn.GroupNorm(2,4) #定义组规范化>>> output1=nnnn(input2)>>> output1tensor([[[[[-0.7846, 0.0791, 1.536原创 2022-02-27 13:28:58 · 2916 阅读 · 0 评论 -
如何得到PyTorch中张量的值?
1、将张量转换为numpy:x.numpy()[0]2、使用x.item()从有一个元素的张量中获取Python数原创 2022-03-01 13:30:47 · 2495 阅读 · 1 评论 -
Pytorch 如何计算三角函数
1、加载库首先加载torch库,进入python后加载库使用import导入【import 库名】2、sin值计算方法pytorch中的sin计算都是基于tensor的,所以无论单个值还是多个值同时计算sin值,都需要首先将输入量转换为tensor使用指令:【torch.sin(tensor)】实例中,使用了计算单个和多个sin值时的情况3、cos值计算方法pytorch中的cos计算都是基于tensor的,所以无论单个值还是多个值同时计算cos值,都需要首先将输原创 2022-02-28 10:44:10 · 3342 阅读 · 1 评论 -
vgg16_reducedfc.pth权重下载地址
链接: https://pan.baidu.com/s/1qdAoL8oMJ75MdIL1tUsS1w提取码: 1n05原创 2022-03-05 15:08:03 · 893 阅读 · 0 评论 -
Pytorch训练网络模型过程中Loss为负值的问题及其解决方案
1. 问题描述在复现论文的过程中,遇到了训练模型Loss一直为负的情况。程序主要通过深度学习实现一个分类任务。编程与debug过程全部在windows10系统,Pycharm2018v1.4的IDE下完成,主要框架为pytorch 1.2.0。复现过程中采用了交叉熵损失函数计算Loss。训练过程中输出信息如下:输出部分的代码段:for batch_idx, (data, target) in enumerate(train_loader):data, target = data.t原创 2022-03-05 15:08:07 · 14074 阅读 · 3 评论 -
self-attention 的 pytorch 实现
问题基于条件的卷积GAN 在那些约束较少的类别中生成的图片较好,比如大海,天空等;但是在那些细密纹理,全局结构较强的类别中生成的图片不是很好,如人脸(可能五官不对应),狗(可能狗腿数量有差,或者毛色不协调)。可能的原因大部分卷积神经网络都严重依赖于局部感受野,而无法捕捉全局特征。另外,在多次卷积之后,细密的纹理特征逐渐消失。SA-GAN解决思路不仅仅依赖于局部特征,也利用全局特征,通过将不同位置的特征图结合起来(转置就可以结合不同位置的特征)。###################原创 2022-03-15 08:22:30 · 3047 阅读 · 2 评论 -
pytorch tensor与numpy转换
tensor to numpya = torch.ones(5)print(a)输出tensor([1., 1., 1., 1., 1.])进行转换b = a.numpy()print(b)输出[1. 1. 1. 1. 1.]注意,转换后的tensor与numpy指向同一地址,所以,对一方的值改变另一方也随之改变a.add_(1)print(a)print(b)numpy to tensorimport numpy as npa = np.o原创 2022-03-04 12:26:09 · 650 阅读 · 0 评论 -
@once_differentiable有什么用?
from torch.autograd.function import once_differentiableclass GOF_Function(Function): @staticmethod #一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 def forward(ctx, weight, gaborFilterBank):# 在forward中,需要定义G.原创 2022-03-05 15:08:46 · 1448 阅读 · 2 评论 -
PyTorch数据和NumPy数据之间的互操作
说明,由于Python的缓存协议,只要PyTorch的数据是在cpu上,不是在GPU上,那么torch.Tensor类型的数据和numpy.ndarray的数据是共享内存的,相互之间的改变相互影响.This zero-copy interoperability with NumPy arrays is due to the storage system working with the Python buffer protocol (https://docs.python.org/3/c-api/buffe原创 2022-03-15 08:22:50 · 490 阅读 · 0 评论 -
Sampler类与4种采样方式
由于我们不能将大量数据一次性放入网络中进行训练,所以需要分批进行数据读取。这一过程涉及到如何从数据集中读取数据的问题,pytorch提供了Sampler基类【1】与多个子类实现不同方式的数据采样。子类包含:Sequential Sampler(顺序采样) Random Sampler(随机采样) Subset Random Sampler(子集随机采样) Weighted Random Sampler(加权随机采样)等等。1、基类Samplerclass Sampler(object):原创 2022-03-15 08:23:14 · 4863 阅读 · 0 评论 -
Python torch 模块,randperm() 实例源码
torch.randperm(n, *, out=None, dtype=torch.int64, layout=torch.strided, device=None , requires_grad=False) → LongTensor返回整数从0到n-1的随机排列。Parameters: n (int) 上限整数(不包含)Example:>>> torch.randperm(4)tensor([2, 1, 0...原创 2022-03-17 09:11:24 · 1160 阅读 · 0 评论 -
在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新
为什么我们要控制梯度流为什么我们要控制梯度流?这个答案有很多个,但是都可以归结为避免不需要更新的模型模块被参数更新。 我们在深度模型训练过程中,很可能存在多个loss,比如GAN对抗生成网络,存在G_loss和D_loss,通常来说,我们通过D_loss只希望更新判别器(Discriminator),而生成网络(Generator)并不需要,也不能被更新;生成网络只在通过G_loss学习的情况下,才能被更新。这个时候,如果我们不控制梯度流,那么我们在训练D_loss的时候,我们的前端网络Generato原创 2022-03-16 08:49:22 · 3443 阅读 · 0 评论 -
pytorch 判断两个 tensor 是否相等
不用循环,用 pytorch 的基本函数, 非常简洁. 代码如下:import torchx = torch.tensor([[1, 2], [3, 4]])y = torch.tensor([[1, 2], [3, 4]])assert 0 == ((x != y).sum())xx = torch.tensor([[1, 2], [3, 4]])yy = torch.tensor([[2, 2], [3, 3]])assert 0 == (xx != yy).sum().原创 2022-03-16 08:49:28 · 3561 阅读 · 0 评论 -
torch.zeros_like
torch.zeros_like:生成和括号内变量维度维度一致的全是零的内容。import torcha = torch.rand(5,1)print(a)n=torch.zeros_like(a)print('n=',n)tensor([[0.9653], [0.5581], [0.1648], [0.3715], [0.2194]])n= tensor([[0.],原创 2022-03-16 08:49:48 · 1387 阅读 · 0 评论 -
pytorch torch.sort()的用法以及例子
1.作用对tensor中元素排序2.用法dim = -1,按照行排序,dim= 1按照列排序,descending=True,则递减排序,否则递增3.例子按照行排序logits = torch.tensor([[[-0.5816, -0.3873, -1.0215, -1.0145, 0.4053], [ 0.7265, 1.4164, 1.3443, 1.2035, 1.8823], [-0.4451, 0.1673, 1原创 2022-03-06 13:41:50 · 5424 阅读 · 0 评论 -
torch之nn.utils.clip_grad_norm
nn.utils.clip_grad_norm(parameters, max_norm, norm_type=2)这个函数是根据参数的范数来衡量的Parameters: parameters (Iterable[Variable]) – 一个基于变量的迭代器,会进行归一化(原文:an iterable of Variables that will have gradients normalized) max_norm (float or int) – 梯度的最大范数(原文:max...原创 2022-03-06 13:42:27 · 1106 阅读 · 0 评论 -
Pytorch的22个激活函数
转自:https://www.pianshen.com/article/33331174884/1.22.Linear常用激活函数1.22.1.ReLU torch.nn.ReLU()1.22.2.RReLU torch.nn.RReLU()1.22.3.LeakyReLU torch.nn.LeakyReLU()1.22.4.PReLU torch.nn.PReLU()1.22.5.Sofplus torch.nn.Softplus()1.22.6.ELU torch.nn.ELU()1原创 2022-03-10 13:27:19 · 11027 阅读 · 0 评论 -
pytorch中torch.isnan()和torch.isfinite()
1.torch.isfinite()import torchnum = torch.tensor(1) # 数字1res = torch.isfinite(num)print(res)'''输出:tensor(True)'''这个num必须是tensorimport torchnum = torch.tensor(float('inf')) # 正无穷大res = torch.isfinite(num)print(res)'''输出:tensor(False)原创 2022-03-08 12:47:54 · 3818 阅读 · 0 评论 -
batchnorm2d参数 torch_Pytorch自由载入部分模型参数并冻结
Pytorch的load方法和load_state_dict方法只能较为固定的读入参数文件,他们要求读入的state_dict的key和Model.state_dict()的key对应相等。而我们在进行迁移学习的过程中也许只需要使用某个预训练网络的一部分,把多个网络拼和成一个网络,或者为了得到中间层的输出而分离预训练模型中的Sequential 等等,这些情况下。传统的load方法就不是很有效了。例如,我们想利用Mobilenet的前7个卷积并把这几层冻结,后面的部分接别的结构,或者改写成FCN结构原创 2022-03-08 12:48:01 · 846 阅读 · 0 评论 -
torch.index_select()
函数形式:index_select( dim, index)参数:dim:表示从第几维挑选数据,类型为int值; index:表示从第一个参数维度中的哪个位置挑选数据,类型为torch.Tensor类的实例;刚开始学习pytorch,遇到了index_select(),一开始不太明白几个参数的意思,后来查了一下资料,算是明白了一点。a = torch.linspace(1, 12, steps=12).view(3, 4)print(a)b = torch.ind转载 2022-03-08 12:48:10 · 1129 阅读 · 1 评论 -
torch.masked_select
简介:在学习pytorch的官方文档时,发现掩码的程序贴错了,自己写了一个,大家可以参考。torch.masked_select(input, mask, out=None) → Tensor根据掩码张量mask中的二元值,取输入张量中的指定项(mask为一个ByteTensor),将取值返回到一个新的1D张量,张量mask须跟input张量有相同数量的元素数目,但形状或维度不需要相同。注意: 返回的张量不与原始张量共享内存空间。参数:input (Tensor) – 输...原创 2022-03-20 13:39:43 · 1916 阅读 · 0 评论 -
torch.div
torch.div(a, b) ,a和b的尺寸是广播一致的,而且a和b必须是类型一致的,就是如果a是FloatTensor那么b也必须是FloatTensor,可以使用tensor.to(torch.float64)进行转换。>>> a = torch.randn(4, 4)>>> atensor([[-0.3711, -1.9353, -0.4605, -0.2917], [ 0.1815, -1.0111, 0.9805, -1.5923]原创 2022-03-20 13:40:33 · 1694 阅读 · 1 评论 -
Python PyTorch is_tensor()用法及代码示例
PyTorch torch.is_tensor()如果传递的对象是PyTorch张量,则方法返回True。用法:torch.is_tensor(object) 参数object:这是要测试的输入张量。返回:它返回True或False。让我们借助几个示例来了解这个概念:范例1:# Importing the PyTorch library import torch # A constant tensor of size n a = torch.FloatT...原创 2022-03-20 13:41:18 · 1494 阅读 · 0 评论 -
torch.atan()
说明:返回一个新张量,包含输入input张量每个元素的反正切函数。参数:tensor(Tensor) -- 输入张量 out(Tensor, optional) -- 输出张量>>> a = torch.randn(4)>>> torch.atan(a)tensor([ 0.4967, -0.6854, 0.8361, 1.0014])承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼.原创 2022-03-21 10:35:38 · 2218 阅读 · 0 评论 -
torch.manual_seed( )
在神经网络中,参数默认是进行随机初始化的。如果不设置的话每次训练时的初始化都是随机的,导致结果不确定。如果设置初始化,则每次初始化都是固定的。if args.seed is not None: random.seed(args.seed) # torch.manual_seed(args.seed) #为CPU设置种子用于生成随机数,以使得结果是确定的 torch.cuda.manual_seed(args.seed) #为当前GPU设置随机种子; cudnn.determinis原创 2022-03-21 10:35:48 · 1205 阅读 · 0 评论 -
Pytorch之contiguous的用法
contiguoustensor变量调用contiguous()函数会使tensor变量在内存中的存储变得连续。contiguous():view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。一种可能的解释是: 有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguou原创 2022-03-21 10:36:02 · 2763 阅读 · 0 评论 -
pytorch中squeeze()和unsqueeze()函数介绍
一、unsqueeze()函数1. 首先初始化一个a可以看出a的维度为(2,3)2. 在第二维增加一个维度,使其维度变为(2,1,3)可以看出a的维度已经变为(2,1,3)了,同样如果需要在倒数第二个维度上增加一个维度,那么使用b.unsqueeze(-2)二、squeeze()函数介绍1. 首先得到一个维度为(1,2,3)的tensor(张量)由图中可以看出c的维度为(1,2,3)2.下面使用squeeze()函数将第一维去掉可见,维度已经变为(2,3)原创 2022-03-21 10:36:09 · 1667 阅读 · 0 评论 -
torch.randn()、torch.mean()、torch.pow()、torch.matmul()
torch.randn()产生大小为指定的,正态分布的采样点,数据类型是tensortorch.mean()torch.mean(input) 输出input 各个元素的的均值,不指定任何参数就是所有元素的算术平均值,指定参数可以计算每一行或者 每一列的算术平均数例如:a=torch.randn(3) #生成一个一维的矩阵b=torch.randn(1,3) #生成一个二维的矩阵print(a)print(b)torch.mean(a)结果:tensor([-原创 2022-03-09 10:13:40 · 1233 阅读 · 0 评论 -
torch.eq、torch.ne、torch.gt、torch.lt、torch.ge、torch.le
PyTorch - torch.eq、torch.ne、torch.gt、torch.lt、torch.ge、torch.leflyfishtorch.eq、torch.ne、torch.gt、torch.lt、torch.ge、torch.le以上全是简写参数是input, other, out=None逐元素比较input和other返回是torch.BoolTensorimport torcha=torch.tensor([[1, 2], [3, 4]])b=torch.t原创 2022-03-09 10:13:42 · 2888 阅读 · 0 评论 -
torch.ge()
函数作用 torch.ge(a,b)比较a,b的大小,a为张量,b可以为和a相同形状的张量,也可以为一个常数。 代码示例 >>> import torch>>> a=torch.Tensor([[1,2,3],[4,5,6]])>>> atensor([[1., 2., 3.], [4., 5., 6.]])>>> b=torch.Tensor([[2,2,2],[4,5,7]])>..原创 2022-03-22 10:42:00 · 1029 阅读 · 0 评论 -
pytorch的显存机制torch.cuda.empty_cache()
Pytorch已经可以自动回收我们不用的显存,类似于python的引用机制,当某一内存内的数据不再有任何变量引用时,这部分的内存便会被释放。但有一点需要注意,当我们有一部分显存不再使用的时候,这部分释放的显存通过Nvidia-smi命令是看不到的,举个例子:device = torch.device('cuda:0')# 定义两个tensordummy_tensor_4 = torch.randn(120, 3, 512, 512).float().to(device) # 120*3*512*原创 2022-03-22 10:42:43 · 1914 阅读 · 0 评论 -
torch.cuda命令查询
1. 服务器GPU状态查询 1) lspci | grep -i nvidia 可以查询所有nvidia显卡 2) lspci -v -s [显卡编号] 可以查看显卡具体属性 3) nvidia-smi 可以查看显卡的显存利用率2. torch.cuda主要函数 1) 查看是否有可用GPU:torch.cuda.is_available()可用GPU数量:gpus = torch.cuda.device_count()logger.info...原创 2022-03-22 10:42:47 · 5211 阅读 · 0 评论