Pytorch框架
文章平均质量分 92
pytorch实战
绛洞花主敏明
研究生在读,喜欢刺激有挑战。
展开
-
GAN(图卷积网络)的Pytorch实现
import torchimport torch.nn as nnimport torch.nn.functional as Fimport networkx as nxdef normalize(A , symmetric=True): # A = A+I A = A + torch.eye(A.size(0)) # 所有节点的度 d = A.sum(1) if symmetric: #D = D^-1/2 D = torch.diag(torch.pow(d , -0.5转载 2020-07-31 15:15:57 · 1286 阅读 · 0 评论 -
Pytorch多机多卡分布式训练
被这东西刁难两天了,终于想办法解决掉了,来造福下人民群众。关于Pytorch分布训练的话,大家一开始接触的往往是DataParallel,这个wrapper能够很方便的使用多张卡,而且将进程控制在一个。唯一的问题就在于,DataParallel只能满足一台机器上gpu的通信,而一台机器一般只能装8张卡,对于一些大任务,8张卡就很吃力了,这个时候我们就需要面对多机多卡分布式训练这个问题了,噩梦开始了。官方pytorch(v1.0.10)在分布式上给出的api有这么几个比较重要的:1. torch.nn.转载 2020-07-17 14:21:37 · 3687 阅读 · 1 评论 -
pytorch一机多卡训练
1. 一机多卡(one matchine multi-GPU)1.1 DataParallelDataParallel(DP):Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。 有个不能接受的缺陷是:DataParallel是基于Parameter server的算法,所有的loss都在主卡上计算,负载不均衡的问题比较严重,有时在模型较大的时候(比如bert-large),主卡占满了,其他的卡一半都占不到,及其浪费资源。值得注意的是,模型和数据都需要先 load转载 2020-07-17 12:01:46 · 3402 阅读 · 0 评论 -
(深度学习)为什么GPU比CPU慢?
GPU由于擅长矩阵运算,在深度学习尤其是计算机视觉方面得到了广泛的应用。前几天在我废了好大劲在我的的电脑上安装了Tensorflow 2.0 - GPU,然后就迫不及待地去体验一下GPU的速度。我去Tensorflow官网上直接复制了一段代码,就是最简单的神经网络识别MNIST手写数字数据集。然后分别用GPU和CPU跑了以下,结果让我大吃一惊。之前听别人说用GPU通常会比CPU快好几倍,而我经过尝试发现GPU竟然比CPU还要慢了好多!经过请教别人和上网查资料得出结论:是因为模型规模过小,没有体现出GP转载 2020-07-15 09:43:37 · 3967 阅读 · 1 评论 -
深度学习实现余弦相似度计算加速-GPU
一、前言本文中根据甲方需求实现调用GPU加速计算两千万次的余弦相似度计算,根据需求分析,可以大致分为两个实现目标。在10s内完成1:2000000次的余弦相似度计算。在10s内同时完成topk的计算。二、实现方法因为在需求中需要完成GPU来加载数据和计算,因此使用普通的程序是无法完成调用GPU的任务,因此,在实现过程中决定采用卷积神经网络的思想来完成数据的加载和计算,同时也能根据需求,分别测试CPU和GPU两种设备下的速度。初次之外,本文在实现过程中分别采用了两种方式来完成,分别如下:采原创 2020-07-14 18:11:04 · 3421 阅读 · 4 评论 -
pytorch:如何修改加载了预训练权重的模型的输入或输出--(修改torch.nn.DataParallel权重为cpu加载)
简介如果训练模型使用的算法是在GPU上使用torch.nn.DataParallel加载多个GPU进行训练,那么是不可以直接在cpu上进行直接推理,原因是权重文件中的节点名称中均增加了一个module的参数文件。为了能再cpu上进行加载,除了需要注意使用跨设备加载时使用,map_location="cpu"之外,还需要对权重文件进行修改。代码import torchdef change_feature(check_point): device = torch.device("cuda" i原创 2020-06-23 17:39:56 · 3138 阅读 · 14 评论 -
pytorch 在用gpu训练模型训练 损失函数不需要迁移到gpu
在进行pytorch 训练时候,输入的数据tensor,以及模型需要.cuda,但是在做损失函数的时候,就不需要将Loss函数设置为cuda形式了,因为此时送入loss的数据已经是cuda类型的了,损失就会在这上面直接计算。...转载 2020-06-16 11:36:44 · 1107 阅读 · 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 · 3013 阅读 · 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 · 11129 阅读 · 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 · 6060 阅读 · 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 评论 -
基于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 · 2534 阅读 · 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 · 555 阅读 · 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 · 1015 阅读 · 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中torch.max和F.softmax函数的维度解释
在利用torch.max函数和F.Ssoftmax函数时,对应该设置什么维度,总是有点懵,遂总结一下:首先看看二维tensor的函数的例子:import torchimport torch.nn.functional as F input = torch.randn(3,4)print(input)tensor([[-0.5526, -0.0194, 2.1469, -0.2567...转载 2020-04-21 21:33:40 · 3386 阅读 · 0 评论 -
PyTorch使用cpu与gpu之间模型相互加载调用
case1、GPU下DataParallel训练的模型----> CPU问题:最近遇到一个问题,发下gpu训练的模型在cpu下不能跑,很难受。结果发现原来是自己使用了DataParallel的问题,我保存的是整个模型。model=DataParalle(model)torch.save(‘xx.pkl’,model)然后把模型copy到自己电脑上用cpu跑model=torch...原创 2020-04-19 13:36:09 · 1164 阅读 · 2 评论 -
pytorch:如何修改加载了预训练权重的模型的输入或输出--(生成新的权重文件)
问题:使用pytorch训练加载预训练模型会修改网络传入的参数,例如类别等,修改后的网络加载预训练网络则会出现维度不匹配的错误,例如如下size mismatch for word_embeddings.weight: copying a param with shape torch.Size([3403, 128]) from checkpoint, the shape in current ...原创 2020-04-19 11:07:55 · 6402 阅读 · 7 评论 -
pytorch:如何修改加载了预训练权重的模型的输入或输出--(原权重文件修改参数)
在使用pytorch的过程中,我们往往会使用官方发布的预训练模型,并在此基础上训练自己的模型。为了适配训练数据,有时候需要局部修改这类预训练模型的结构,本文将分别以修改输入的通道数和输出的分类数为例,讲解一种通用的方法来修练模型的结构。加载模型在修改之前需要加载预训练模型,这里以mobilenet v2为例import torchvision.models as modelsmodel =...转载 2020-04-19 10:48:32 · 10093 阅读 · 11 评论 -
使用pytorch时遇到的问题汇总(二)
1、Missing key(s) in state_dict: “cnn.cnn.0.weight”, “cnn.cnn.0.bias”, “cnn.cnn.3.weight”,… Unexpected key(s) in state_dict: “decoder.embedding.weight”…情况分为两种情况一解决:model.load_state_dict(checkpoint, ...原创 2020-04-18 23:59:15 · 1127 阅读 · 2 评论 -
使用pytorch时遇到的问题汇总(一)
1、报错TypeError: unhashable type: ‘numpy.ndarray’原因:在将pytorch的longTensor转为numpy,并用于dict的key的时候,会出现这样的错误。其实程序输出已经是int了,但是还是会被认为是ndarray。解决:在原来的基础上加上.item()classId = support_y[i].long().cpu().detach()....转载 2020-04-18 23:49:29 · 20845 阅读 · 3 评论 -
PyTorch中Variable变量与torch.autograd.Variable
一、了解Variable顾名思义,Variable就是 变量 的意思。实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性。具体来说,在pytorch中的Variable就是一个存放会变化值的地理位置,里面的值会不停发生片花,就像一个装鸡蛋的篮子,鸡蛋数会不断发生变化。那谁是里面的鸡蛋呢,自然就是pytorch中的tensor了。(也就是说...转载 2020-04-13 22:20:22 · 19633 阅读 · 3 评论 -
pytorch中model.train、model.eval以及torch.no_grad的用法
原作者链接https://blog.csdn.net/qq_33590958/article/details/105201127?fps=1&locationNum=2和http://sdsy888.me/%E6%A1%86%E6%9E%B6-Framework/%E9%9A%8F%E7%AC%94-Writing/2020/pytorch%E4%B8%ADmodel-eval-%E5%...转载 2020-04-12 11:56:29 · 776 阅读 · 0 评论 -
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data 返回和 x 的相同数据 tensor, 但不会加入到x的计算历史里,且require s_grad = False, 这样有些时候是不安全的, 因为 x.data 不能被 autograd 追踪求微分 。.detach() 返回相同数据的 tensor ,且 requires_grad=False...转载 2020-04-12 15:41:51 · 1368 阅读 · 0 评论 -
Python中json.loads()无法解析单引号字符串问题的解决方法
方案一:替换字符串中的单引号为双引号使用s.replace()将字符串中的单引号替换为双引号。import json # 创建字典dict = {}dict['id'] = 'cc695906217'dict['name'] = '种冲'# 打印字典print(dict)# 保存为json文件with open('dict.json','w',encoding='utf-8'...转载 2020-01-08 17:34:02 · 6333 阅读 · 0 评论 -
Pyinstaller打包深度学习框架torch(torchvision)问题解决
使用pyinstaller打包程序的时候经常会出现各种各样的问题,根据本人花费了两天的时间解决问题的实际经验来看,要认真分析问题,理解Pyinstaller的打包机制才能从根本上解决问题。打包pytorch遇见的问题出现failed to execute script问题解析如果你想打包的程序包含torchvision, 且版本>=0.3.0则常规的打包方法到最后是行不通的,程序是...原创 2019-09-27 10:29:11 · 3923 阅读 · 0 评论 -
PyTorch模型保存与加载
torch.save:保存序列化的对象到磁盘,使用了Python的pickle进行序列化,模型、张量、所有对象的字典。torch.load:使用了pickle的unpacking将pickled的对象反序列化到内存中。torch.nn.Module.load_state_dict:使用反序列化的state_dict加载模型的参数字典。state_dict 是一个Python字典,将每一层...转载 2019-08-28 16:01:43 · 1167 阅读 · 0 评论