pytorch
LoveMIss-Y
爱生活,爱学习,爱这个世界上一切让自己觉得快乐的东西,爱MIss-Y
展开
-
tensorflow与pytorch的GPU分配与使用策略详解
前言:看了很多关于多GPU分配与使用的文章,发现很多文章都是只介绍了一些最浅显的东西,没有深入解释清楚,本文所使用的服务器上面含有4块 GTX2080Ti 的GPU。声明:深度学习框架所使用的GPU不是以GPU本身的个数和编号而言的,而是以我们本身给框架能够看见的GPU数量而言的,什么意思呢?一、关于GPU的可见性与框架使用的GPU的映射关系——device mapping(1)当不设定任何限制的时候,我们的框架可以看见4块GPU,所以在使用的时候对应的关系如下:/job:localhos原创 2020-05-09 15:11:49 · 6425 阅读 · 0 评论 -
TensorFlow(2.x版本,1.x版本)以及pytorch版本中关于GPU的信息查看以及GPU的配置问题
前言:我们一般使用深度学习框架都是GPU版本的,如何检测我们的安装是否成功,GPU、CUDA、CUDNN等信息呢?本文做了一个归纳总结:一、tensorflow版本的GPU信息查看(1)tensorflow版本tf.__version__ tensorflow版本tf.__xxxxx__ 一些信息的查看tf.verison.xxxx 一些信息tf.te...原创 2020-04-14 17:50:35 · 2190 阅读 · 0 评论 -
pytorch的自定义拓展之(三)——torch.autograd.Function的简单定义与案例
前言:详细过程可以参考前面的两篇文章:pytorch的自定义拓展之(二)——torch.autograd.Function完成自定义层pytorch的自定义拓展之(一)——torch.nn.Module和torch.autograd.Function一、使用autograd.Function 定义新的自动求导函数在底层,每一个原始的自动求导运算实际上是两个在Tens...原创 2019-10-12 11:39:46 · 7610 阅读 · 2 评论 -
pytorch中的.detach和.data深入详解
前言:这两个方法都可以用来从原有的计算图中分离出某一个tensor,有相似的地方,也有不同的地方,下面来比较性的看一看。PyTorch0.4以及之后的版本中,.data 仍保留,但建议使用 .detach()一、tensor.data的使用先直接看一段代码:import torcha = torch.tensor([1,2,3.], requires_grad = T...原创 2019-07-22 11:17:50 · 21858 阅读 · 7 评论 -
pytorch 网络结构可视化方法汇总(三种实现方法详解)
前言:在深度学习的时候,能够很好的绘制出整个网络的模型图,这是非常方便的,当前流行的tensorflow和pytorch都有很多种方法可以绘制模型结构图,特在此总结如下:tensorflow的模型结构可视化方法:(1)使用自带的tensorboard(不直观)(2)使用netron工具打开(.pd 或者是.meta文件)(3)第三方库CNNGraph(https://g...原创 2019-07-23 18:03:09 · 68665 阅读 · 22 评论 -
收集到的 PyTorch trick 集锦
目录:指定GPU编号 查看模型每层输出详情 梯度裁剪 扩展单张图片维度 独热编码 防止验证模型时爆显存 学习率衰减 冻结某些层的参数1、指定GPU编号设置当前使用的GPU设备仅为0号设备,设备名称为/gpu:0:os.environ["CUDA_VISIBLE_DEVICES"] = "0" 设置当前使用的GPU设备为0,1号两个设备,名称依次为/...转载 2019-08-13 17:57:00 · 767 阅读 · 1 评论 -
深度学习中GPU和显存分析
一 神经网络显存占用分析神经网络模型占用的显存包括:模型自身的参数 模型的输出1.1 参数的显存占用只有有参数的层,才会有显存占用。这部份的显存占用和输入无关,模型加载完成之后就会占用。(1)有参数的层主要包括:卷积 全连接 BatchNorm BN层也是有参数的哦, Embedding层 ... ...(2)无参数的层:多数的激活层(Sigmoid...原创 2019-08-13 19:11:18 · 1794 阅读 · 0 评论 -
(第四篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Transform,Sampler采样器补充
前言:前面有系列文章讲解了Dataset,DataLoader,Transform三者之间的关系,里面在讲到Sampler的时候提到那是一个“采样器”,没有深入介绍,本文续接前面的文章,参考:(第一篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Transform(第二篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Trans...转载 2019-08-30 21:09:22 · 2684 阅读 · 0 评论 -
pytorch中实现循环神经网络的基本单元RNN、LSTM、GRU的输入、输出、参数详细理解
前言:这篇文章是对已经较为深入理解了RNN、LSTM、GRU的数学原理以及运算过程的人而言的,如果不理解它的基本思想和过程,可能理解起来不是很简单。一、先从一个实例看起这是官网上面的一个例子,本次以LSTM作为例子而言,实际上,GRU、LSTM、RNN的运算过程是很类似的。import torchimport torch.nn as nnlstm = nn.LSTM(10,...原创 2019-08-31 12:02:54 · 10895 阅读 · 4 评论 -
pytorch中保存的模型文件.pth深入解析
前言:前面有专门的讲解关于如何深入查询模型的参数信息,可以参考这篇文章:pytorch教程之nn.Module类详解——state_dict和parameters两个方法的差异性比较本次来解析一下我们通常保存的模型文件 .pth 文件到底内部是什么?一、.pth 文件详解在pytorch进行模型保存的时候,一般有两种保存方式,一种是保存整个模型,另一种是只保存模型的参数。...原创 2019-09-12 16:50:40 · 64194 阅读 · 14 评论 -
pytorch自动求导Autograd系列教程(二)
前言:前面介绍了pytorch自动求导的一些基本操作和概念,本文续接上一篇,会继续深入介绍pytorch的自动求导相关的注意事项。上一篇文章参见:pytorch自动求导Autograd系列教程(一)一、求导的另外两种方法1.1 方法一:通过torch.autograd.backward()求导前面介绍的求导的基本公式为:y.backward(grad_tensors=None...原创 2019-09-29 13:49:43 · 1527 阅读 · 1 评论 -
pytorch中关于分类问题损失函数的易混淆点——交叉熵损失的基本原理以及几种不同的实现
前言:pytorch中有几个非常容易搞混淆的函数,它们是softmax和log_softmax,CrossEntropyLoss()和NLLLoss(),为了更加彻底的弄清楚,本文将分为两篇文章来说明,第一篇说明原理,第二篇说明用法。一、二分类损失函数1.1 从一个简单的实例说起对于一个二分类问题,比如我们有一个样本,有两个不同的模型对他进行分类,那么它们的输出都应该是一个二维向量...原创 2019-10-09 19:47:14 · 3189 阅读 · 1 评论 -
(第三篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Transform
前言:系列文章的前面两篇文章已经很明确的说明了如何使用DataSet类和DataLoader类,而且第二篇文章中详细介绍了DataLoader类中的几个重要的常用的参数,如sampler参数、collate_fn参数,但是在数据与处理的过程中,还会遇到数据增强、数据裁剪等各种操作,当然这些操作我们可以预先自己来实现,但是pytorch提供了强大的处理工具来对图像进行预处理,这也是本文的重点...原创 2019-07-25 10:33:11 · 16266 阅读 · 5 评论 -
(第二篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Transform
前言:前面的系列文章之第一篇已经基本上说明了DataSet类和DataLoader类的用法,但是鉴于DataLoader类中有一个参数collate_fn使用起来比较复杂,所以本次的第二篇文章还专门说一下这个函数的功能。第一篇文章请参考:(第一篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Transformcollate_fn,中单词collate的...原创 2019-07-24 15:25:35 · 4013 阅读 · 4 评论 -
(第一篇)pytorch数据预处理三剑客之——Dataset,DataLoader,Transform
前言:在深度学习中,数据的预处理是第一步,pytorch提供了非常规范的处理接口,本文将针对处理过程中的一些问题来进行说明,本文所针对的主要数据是图像数据集。本文的案例来源于车道线语义分割,采用的数据集是tusimple数据集,当然先需要将tusimple数据集写一个简单的脚本程序转换成指定的数据格式,如下:一、基本概述pytorch输入数据PipeLine一般遵循一个“三...原创 2019-07-24 14:31:27 · 11642 阅读 · 2 评论 -
pytorch学习手册【二】
九、Reduction Ops(规约/简化操作)torch.argmax(input,dim=None,keepdim=False)torch.argmin(input,dim=None,keepdim=False)torch.cumprod(input,dim,dtype=None)→ Tensortorch.cumsum(input,dim,o...原创 2019-04-18 11:59:01 · 1825 阅读 · 0 评论 -
pytorch自动求导Autograd系列教程(一)
前言:构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数。搭建计算图的过程,称为“正向传播”,这个是需要我们自己动手的,因为我们需要设计我们模型的结构。由损失函数求导的过程,称为“反向传播”,求导是件辛苦事儿,所以自动求导基本上是各种深度学习框架的基本功能和最重要的功能之一,PyTorch也不例外,后面有时间会写一下...原创 2019-04-19 15:22:56 · 11250 阅读 · 12 评论 -
pytorch各个版本下载地址大全
pytorch官方网站有一个问题就是默认的是只推荐安装最新版本的pytorch,但是有时候我想安装一些老一点的版本,不太好找,而通过pip在线安装当然可以,可是在国内常常下载速度又很慢,或者是下载到一半就被终止了,经过搜集,我将一些常见的版本的下载地址总结如下:当前截止时间为2019年5月9日。另外需要注意的是本文是以python3.6为基础的,另外python3....原创 2019-05-09 15:06:09 · 85749 阅读 · 7 评论 -
pytorch教程之nn.Sequential类详解——使用Sequential类来自定义顺序连接模型
前言:类似于keras中的序贯模型,当一个模型较简单的时候,我们可以使用torch.nn.Sequential类来实现简单的顺序连接模型。这个模型也是继承自Module类的,关于这个类,后面的文章会详细介绍。一、关于Sequential类的简介先来看一下它的定义吧,在之前,我们首先需要明确一个特别重要的观念,那就是——torch的核心是Module类,Module类在下面这个模...原创 2019-05-26 09:40:27 · 128268 阅读 · 23 评论 -
pytorch教程之nn.Module类详解——使用Module类来自定义模型
前言:pytorch中对于一般的序列模型,直接使用torch.nn.Sequential类及可以实现,这点类似于keras,但是更多的时候面对复杂的模型,比如:多输入多输出、多分支模型、跨层连接模型、带有自定义层的模型等,就需要自己来定义一个模型了。本文将详细说明如何让使用Mudule类来自定义一个模型。一、torch.nn.Module类概述个人理解,pytorch不...原创 2019-05-30 20:35:40 · 143769 阅读 · 32 评论 -
pytorch搭建模型的的五大层次级别(由浅入深)
前言:神经网络的搭建本身是一个较为复杂的过程,但是现在有非常多的、非常人性化的开源框架提供给我们使用,但是即便如此,网络的搭建也是有多种方法可以选择,本文以pytorch为例子加以说明。神经网络的基本流程可以分为两大步骤,即网络结构搭建+参数的梯度更新(后者又包括 “前向传播+计算参数的梯度+梯度更新”)这其实也是后面pytorch搭建神经网络的一个基本思路1 、原始搭建...原创 2019-05-17 17:48:23 · 8032 阅读 · 12 评论 -
pytorch教程之nn.Module类详解——使用Module类来自定义网络层
前言:前面介绍了如何自定义一个模型——通过继承nn.Module类来实现,在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系,实际上就是前向传播的过程。事实上,在pytorch里面自定义层也是通过继承自nn.Module类来实现的,我前面说过,pytorch里面一般是没有层的概念,层也是当成一个模型来处理的,这里和keras是不一样的。前面...原创 2019-06-16 16:58:06 · 105422 阅读 · 40 评论 -
pytorch教程之损失函数详解——多种定义损失函数的方法
前言:前面的系列文章已经详细介绍了使用torch.nn.Module来实现自己定义的模型、自定义层,本文将继续来说明如何自定义损失函数,需要明确一个观点,不管是定义层还是损失函数,方法有很多,但是通过统一的接口nn.Module是最便于查看的,这也是pytorch的优点之一,模型、层、损失函数的定义具有统一性,都是通过Module类来完成,不像tensorflow那样不规范。具体可以参考前...原创 2019-07-09 13:43:46 · 36331 阅读 · 16 评论 -
pytorch的自定义拓展之(一)——torch.nn.Module和torch.autograd.Function
前言:pytorch的灵活性体现在它可以任意拓展我们所需要的内容,前面讲过的自定义模型、自定义层、自定义激活函数、自定义损失函数都属于pytorch的拓展,这里有三个重要的概念需要事先明确。要实现自定义拓展,有两种方式,(1)方式一:通过继承torch.nn.Module类来实现拓展。这也是我们前面的例子中所用到的,它最大的特点是以下几点:包装torch普通函数和torch.nn...原创 2019-07-09 18:20:05 · 14749 阅读 · 9 评论 -
pytorch的自定义拓展之(二)——torch.autograd.Function完成自定义层
前言:前面的一篇文章中,已经很详细的说清楚了nn.Module、nn.functional、autograd.Function三者之间的联系和区别,虽然autograd.Function本质上是自定义函数的,但是由于神经网络、层、激活函数、损失函数本质上都是函数或者是多个函数的组合,所以使用autograd.Function依然可以达到定义层、激活函数、损失函数、甚至模型的目的,就像我们使...原创 2019-07-10 14:54:54 · 9334 阅读 · 2 评论 -
pytorch教程之nn.Module类详解——state_dict和parameters两个方法的差异性比较
前言:pytorch的模块Module类有很多的方法,前面的文章中已经介绍了四个常用的方法,这四个方法可以用于获取模块中所定义的对象(即每一个层)他们分别是children()、named_children()、modules()、named_modules()方法,本文介绍另外两个重要的方法,这两个方法会获取到模型中训练的参数(权值矩阵、偏置bias),这两个方法是model.state...原创 2019-07-14 17:05:47 · 17680 阅读 · 4 评论 -
pytorch的两个函数 .detach() .detach_() 的作用和区别
前言:当我们再训练网络的时候可能希望保持一部分的网络参数不变,只对其中一部分的参数进行调整;或者值训练部分分支网络,并不让其梯度对主网络的梯度造成影响,这时候我们就需要使用detach()函数来切断一些分支的反向传播一、tensor.detach()返回一个新的tensor,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得...原创 2019-07-11 17:53:09 · 170543 阅读 · 22 评论 -
pytorch学习手册【一】
一、关于Tensors的一些判断torch.is_tensor(obj)torch.is_storage(obj)torch.set_default_dtype(d) 默认的type为torch.float32torch.get_default_dtype()→ torch.dtypetorch.set_default_tensor_type(t) torch...原创 2019-04-17 10:28:16 · 2033 阅读 · 0 评论