![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PyTorch
文章平均质量分 73
harry_tea
这个作者很懒,什么都没留下…
展开
-
register_buffer && nn.Parameter
本文的大部分例子来源于知乎在pytorch模型中保存模型参数的方式如下模型保存的是model.state_dict()返回对象,是一个OrderDict,他的key与value分别是模型需要保存的参数名字和值。下面介绍parameter和buffer的一些用法特点其中parameter可以被optimizer更新,我们在优化模型参数的时候,一般都会写SGD(model.parameters(), xxx),此外parameter与buffer均可以在保存模型参数时被保存到OrderDict中。原创 2023-02-27 09:49:05 · 587 阅读 · 1 评论 -
nn.Sequential && nn.ModuleList
在介绍nn.Sequential和nn.ModuleDict之前,我们需要知道在pytorch构建的model核心是nn.Module模块,下面举个例子在了解这个基本概念之后,我们分别介绍这两个模块。原创 2023-02-26 20:26:17 · 567 阅读 · 0 评论 -
register_buffer
https://blog.csdn.net/qq_42283621/article/details/124921414原创 2023-02-26 11:34:27 · 98 阅读 · 0 评论 -
Pytorch并行计算(三): 梯度累加
梯度累加(Gradient Accmulation)是一种增大训练时batch size的技巧。当batch size在一张卡放不下时,可以将很大的batch size分解为一个个小的mini batch,分别计算每一个mini batch的梯度,然后将其累加起来优化正常的pytorch训练流程如下(来自使用梯度累加的方法如下。原创 2023-02-21 10:15:26 · 1220 阅读 · 0 评论 -
python修改PYTHONPATH环境变量
我们进入到conda中的mmlab环境中,运行下面命令可以看到当前python环境和相关包的信息,也就是sys.path中的内容,有运行命令的当前目录,还有我当前环境mmlab的安装目录,也就是说默认的python在导入module的时候,默认从当前目录下以及当前环境目录下来搜索。原创 2023-01-04 19:36:14 · 2840 阅读 · 1 评论 -
VAE详解及PyTorch代码
首先要明白什么是生成模型?比如我们有一堆数据点XXX,他的真实分布是Pgt(X)P_{gt}(X)Pgt(X),生成模型的目的就是去学习一个模型MMM,将一些随机采样的噪声(通常为高斯噪声)输入到此模型中,使得此模型的输出为XXX中的数据,即模型MMM的分布PPP去尽可能的接近数据的真实分布Pgt(X)P_{gt}(X)Pgt(X),或者说让模型MMM能够尽可能地生成数据点XXX中的数据。原创 2022-12-29 13:39:07 · 1584 阅读 · 0 评论 -
PyTorch分布式backends
Pytorch分布式backends原创 2022-07-26 14:55:22 · 750 阅读 · 0 评论 -
torch.autograd.Function自定义反向求导
Function自定义反向求导规则Extending torch.autogradExtending torch.autograd在某些情况下我们的函数不可微(not differentiable),但是我们仍然需要对他求导时,就需要我们自定义求导方式,这里我们根据PyTorch官网给出的例子,来看一下torch.autograd.Function是如何运行的官网给出的例子为LinearFunction,代码如下,这里我们假设输入为2×32\times32×3的矩阵xxx,权重也为2×32\times原创 2022-03-31 10:40:55 · 1893 阅读 · 0 评论 -
pytorch的几种conv方法
这里写目录标题ConvGroup ConvDepthwise Separable Convolution1. Depthwise Conv2. Pointwise ConvConv首先是常规卷积,假设我们有一张6×4×46 \times 4 \times 46×4×4的特征图,现在想得到一张10×3×310 \times 3 \times 310×3×3的图,如果直接使用卷积操作,卷积核一共有10个,每个大小为6×2×26 \times 2 \times 26×2×2。代码及计算过程如下图所示conv原创 2022-03-30 20:35:47 · 3951 阅读 · 2 评论 -
PyTorch: hook机制
hook机制register_forward_hookregister_full_backward_hookremovevisual在训练神经网络的时候我们有时需要输出网络中间层,一般来说我们有两种处理方法:一种是在model的forward中保存中间层的变量,然后再return的时候将其和结果一起返回;另一种是使用pytorch自带的register_forward_hook,即hook机制register_forward_hookregister_forward_hook(hook)返回m原创 2022-02-24 01:11:37 · 2139 阅读 · 1 评论 -
Net: ConvTranspose2d
本文中主要讲解PyTorch中的转置卷积、逆卷积、微步卷积: ConvTranspose2d函数ConvTranspose2dnn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)此函数作一个反卷积操作,原创 2022-02-17 00:07:07 · 2509 阅读 · 0 评论 -
Net: nn.ReflectionPad2d
nn.ReflectionPad2d(padding)padding: (int or tuple) padding的尺寸,如果是int,使用相同的padding填充边界。如果是(tuple),按照**(left, right, top, bottom)**的顺序来填充使用反射填充的方式来填充边界input: (N, C, Hi, Wi) or (C, Hi, Wi)output: (N, C, Ho, Wo) or (C, Ho, Wo)实例注意:如果镜像填充的数据比原来的数据多,原创 2022-02-16 17:13:45 · 891 阅读 · 0 评论 -
PyTorch: In-place Operation
本文目录In-place Operation常见的In-place操作常见的Out-of-place操作In-place OperationIn-place operation在pytorch中指的是支持原位修改tensor,这样就可以避免新的内存开销,主要是为了降低显存的消耗但是在pytorch反向传播得到计算图的时候需要获取中间变量的值,如果使用in-place操作以后中间值就失去了,无法获得计算图,但是为什么有的激活函数写的in-place操作呢?以ReLU函数为例,当输入值为正值时不变in-原创 2022-02-13 21:17:54 · 669 阅读 · 0 评论 -
PyTorch: tensor操作(一) contiguous
本文目录tensor在内存中的存储contiguoustensor在内存中的存储tensor在内存中的存储包含信息区和存储区**信息区(Tensor)**包含tensor的形状size,步长stride,数据类型type等**存储区(Storage)**包含存储的数据contiguouscontiguous返回一个连续内存的tensorReturns a contiguous in memory tensor containing the same data as self tenso原创 2022-02-13 12:22:13 · 1910 阅读 · 0 评论 -
torch.no_grad()降低显存占用
这个函数一般在测试的时候使用,用来降低显存占用在训练的时候我们需要学习weight和bias的梯度,但是在测试的时候我们不需要获取他们的梯度,因此可以节省大量的显存在训练时我们crop成了一个一个块,例如size为256,在测试时如果将整幅图片都送入网络,有时会out of memory,因此需要no_grad语句使用很简单,在测试时将测试代码放到他下面即可with torch.no_grad(): # 可以显著的降低显存 for i, img in enumerate(tqdm(test原创 2022-02-04 22:03:30 · 2716 阅读 · 0 评论 -
pytorch梯度计算
在训练神经网络时我们有很多的原创 2022-02-04 00:30:55 · 1335 阅读 · 0 评论 -
nn.LayerNorm的实现及原理
LayerNorm在transformer中一般采用LayerNorm,LayerNorm也是归一化的一种方法,与BatchNorm不同的是它是对每单个batch进行的归一化,而batchnorm是对所有batch一起进行归一化的y=x−E(x)Var(x)+ϵ∗γ+βy = \frac{x-E(x)}{\sqrt{Var(x)+\epsilon}}*\gamma+\betay=Var(x)+ϵx−E(x)∗γ+βnn.LayerNorm(normalized_shape, eps=1e-05原创 2022-02-03 20:25:08 · 69117 阅读 · 10 评论 -
不同Normalization之间的比较
Normalization1. Batch Normalization2. Instance Normalization3. Layer Normalization4. Group Normalization不同Normalization之间的具体区别和优缺点我也不是很清楚,这里只是展示他们的具体运行机制1. Batch Normalization加速收敛,归一化为标准正态分布,能够解决梯度消失的问题图像分类任务一般用Batch Normalization,不用Instance Normalizat原创 2021-11-20 22:09:42 · 1765 阅读 · 0 评论 -
Pytorch读取MNIST
MNIST数据集一般有两种使用方法,其中一种在torchvision中已经包装好了,这里讲解手动加载MNIST数据集的方法下载首先在官网下载MNIST数据集,地址,一共有四个压缩包,下载后解压即可读取数据复制下面代码到readdata.py中,然后给定数据集路径读取即可import osimport gzipimport numpy as npfrom torch.utils.data import Dataset''' load data - data_folder: M原创 2022-01-25 20:04:24 · 1565 阅读 · 0 评论 -
pytorch distributed常见错误
计算图问题RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter detection by (1) passing th原创 2022-01-16 10:56:34 · 5298 阅读 · 1 评论 -
transform归一化处理
在加载数据集的时候我们需要对读入的图片进行归一化处理,在pytorch里使用torchvision中的transform来对其进行处理,这里不介绍旋转,裁剪等操作,进介绍归一化操作,会用到下面两个函数transforms.ToTensor()transforms.Normalize()一般处理图片时有两个操作,第一步将其归一化为0-1之间,第二步在使用Normalize进行归一化ToTensor这一步很简单,将图片归一化到[0, 1]之间,即将图片像素(max 255)除上255即可,同时将H原创 2022-01-11 22:53:23 · 3748 阅读 · 0 评论 -
Docker运行PyTorch的一次记录
其实在之前制作完Docker镜像之后,我就用Docker运行过一次程序,但可能最近比较忙,就没有用他来调试PyTorch,下面我记录了一次成功运行PyTorch的经历首先我们进入Dockerdocker run -it --gpus all -v /data4/wangyh:/res nvidia/cuda:v5 /bin/bash`进入Docker之后进入到res文件夹找到docker中挂载的程序,然后用torch.distributed.launch来运行程序,如下python -m torc原创 2022-01-04 22:09:25 · 2236 阅读 · 1 评论 -
vscode调试torch.distributed.launch
在PyTorch中,如果我们要运行一个分布式的程序会用到以下命令python -m torch.distributed.launch --nproc_per_node 8 train.py但是如果我们想调试的时候如果使用命令行调试就会很麻烦,这里我们需要用到vscode的launch.json调试方法,首先我们打开vscode,看一下文件目录下有没有.vscode目录,如果有看一下里面有没有launch.json文件,如果没有我们需要新建一下,如下所示,依次点击然后选择相应的python调试文件即原创 2022-01-04 16:18:56 · 7519 阅读 · 0 评论 -
网络参数和Flops计算
网络参数和Flops计算网络参数计算1. 卷积层2. 线性层3. 归一化层Flops网络参数计算1. 卷积层假设输入维度为m,输出维度为n,卷积核大小为(k, k)bias=True: 一个卷积核含有的参数为mk2mk^{2}mk2,有n个卷积核,所以总参数为mnk2+nmnk^{2}+nmnk2+nbias=False: 没有bias时,不需要加上最后的n,总参数为mnk2mnk^{2}mnk2nn.Conv2d(3, 20, (3, 3), stride=1, padding=1)bi原创 2021-12-29 20:26:40 · 3081 阅读 · 1 评论 -
PyTorch:tensor常用操作
tensor常用操作一、维度重新排列二、Tensor.expand()三、torch.cat()四、torch.split()五、torch.chunk()一、维度重新排列permuate二、Tensor.expand()Tensor.expand(sizes)将tensor进行扩展,size为扩展后的维度,-1表示对这一维度不进行拓展Returns a new view of the self tensor with singleton dimensions expanded to a la原创 2021-12-28 21:05:00 · 3374 阅读 · 0 评论 -
PyTorch学习(一):Dataset && DataLoader
Dataset && DataLoader前言:为了易读以及适应python的模块化编程,PyTorch提供了两个加载数据的原型,分别为:torch.utils.data.Dataset以及torch.utils.data.DataLoader,其中Dataset存储了数据集的样本已经相应的标签,DataLoader将其进一步进行包装成为一个迭代器使得我们可以更容易的从中获取训练样本PyTorch库中已经封装大量的数据集(例如FashionMNIST),可以从下面两个链接中找到使用方原创 2021-12-22 10:15:10 · 251 阅读 · 0 评论 -
PyTorch学习(二):Transform
TransformPyTorchComposition of transformsFunctional TransformsPyTorchtorchvision.transforms前言:Transforms是常见的图像变换工具。他们可以通过compose函数被连接起来Transformation接受tensor图像也接受tensor的batch类型。Tensor类型:CHW,Tensor的batch类型:BCHWTensor的范围由Tensor的类型定义,对于float类型,数值在[0, 1原创 2021-12-22 09:29:46 · 1541 阅读 · 0 评论 -
scheduler学习率设置
在炼丹的过程中,学习率的调整是必不可少的,下面给出scheduler模块的调学习率的方法,后面会慢慢补充调整学习率:PyTorch官方文档一、CyclicLRtorch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_m原创 2021-12-20 22:27:32 · 950 阅读 · 0 评论 -
nn.Upsample
写在前面:在PyTorch中有两种上采样/下采样的方法,一种是Upsample,另一种是interpolate这两个函数的使用方法略有差异,这里仅介绍UpsampleUpsampletorch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)size - output spatial sizes(int or tuple(int, int))scale_factor - multiplier原创 2021-12-19 10:50:26 · 24593 阅读 · 5 评论 -
分布式训练时数据集的分配
本文目录1. DistributedSampler2. BatchSampler1. DistributedSamplertorch.utils.data.distributed.DistributedSampler(dataset, num_replicas=None, rank=None, shuffle=True, seed=0, drop_last=False)dataset: Dataset used for samplingnum_relicas: 参与分配的进程数,默认自己检索ra原创 2021-12-06 12:39:07 · 1948 阅读 · 0 评论 -
Pytorch向量操作(一): torch.meshgrid
torch.meshgrid(*tensors)tensors: 两个一维向量,如果是0维,当作1维处理创建网格坐标Creates grids of coordinates specified by the 1D inputs in attr:tensors.This is helpful when you want to visualize data over some range of inputs.返回:两个矩阵第一个矩阵行相同,列是第一个向量的各个元素第二个矩阵列相同,行是第原创 2021-11-26 00:13:12 · 3335 阅读 · 0 评论 -
nn.Softmax
nn.Softmax(dim=None)dim: 计算的维度 A dimension along which Softmax will be computed (so every slice along dim will sum to 1).用softmax函数将N维输入进行归一化,归一化之后每个输出的Tensor范围在[0, 1],并且归一化的那一维和为1Applies the Softmax function to an n-dimensional input Tensor rescalin原创 2021-11-25 23:40:20 · 6280 阅读 · 0 评论 -
yacs配置神经网络参数
yacs使用一、实例二、方法1. config node节点2. freeze & defrost3. merge_from_file官方库地址:GitHub安装:pip install yacs这个方法比argparse库好用的地方在于你可以建很多个yaml文件,文件里用不同的参数,当一个实验做完继续做下一个实验时重新建立一个文件即可,而不需要更改argparse的参数或者在命令行修改了,附上我写的argparse的链接yacs的使用比较简单,这里我们先看一个实例,然后在介绍一些yac原创 2021-11-21 23:15:43 · 4485 阅读 · 1 评论 -
Pytorch并行计算(二): DistributedDataParallel介绍
PyTorch并行计算一、为什么要并行计算?二、基本概念三、DistributedDataParallel的使用1. multiprocessing2. distributed二者区别一些BUG和问题nn.parallel.DistributedDataParallel这部分是nn.DataParallel的后续,想看nn.DataParallel的点击这里为什么要用nn.parallel.DistributedDataParallel呢,首先我们看PyTorch官网对nn.DataParallel的原创 2021-11-19 10:32:58 · 13047 阅读 · 9 评论 -
保存与加载模型
保存与加载模型一、保存模型torch.save()二、 加载模型原创 2021-11-14 15:52:47 · 2172 阅读 · 0 评论 -
PyTorch指定GPU
PyTorch指定GPU1. 设置可见GPU2. 终端运行时设定3. 代码中设定看后台显卡使用情况(每1s刷新一次) watch -n 1 nvidia-smi1. 设置可见GPUimport osos.environ["CUDA_VISIBLE_DEVICES"] = "0, 1, 2"2. 终端运行时设定CUDA_VISIBLE_DEVICES=1,2,3 python train.py3. 代码中设定import osos.environ["CUDA_VISIBLE_DEVICE原创 2021-11-13 23:46:21 · 1921 阅读 · 0 评论 -
PyTorch设置随机种子
PyTorch设置随机种子在进行网络训练的时候为了之后可以成功复现当前结果,需要设置随机种子废话少说,直接上函数,在train.py最初调用此函数即可def init_seeds(seed=0): random.seed(seed) # seed for module random np.random.seed(seed) # seed for numpy torch.manual_seed(seed) # seed for PyTorch CPU torch.c原创 2021-11-13 23:43:48 · 1928 阅读 · 0 评论 -
nn.Dropout
Dropouttorch.nn.Dropout(p=0.5, inplace=False)p – probability of an element to be zeroed. Default: 0.5inplace – If set to True, will do this operation in-place. Default: False训练过程中以概率P随机的将参数置0,其中P为置0的概率,例如P=1表示将网络参数全部置0During training, randomly zero原创 2021-11-07 11:52:08 · 8918 阅读 · 6 评论 -
torch.nn.CrossEntropyLoss
文章目录1. torch.nn.LogSoftmax2. torch.nn.NLLLOSS3. torch.nn.CrossEntropyLoss首先讲解交叉熵的原理代码解释如果想直接看CrossEntropyLoss的作用可以直接看第三节1. torch.nn.LogSoftmaxtorch.nn.LogSoftmax(dim=None)此函数计算输入向量的Softmax并取对数LogSoftmax(xi)=log(exp(xi)∑jexp(xj))LogSoftmax(x_{i})=log(原创 2021-10-02 16:05:27 · 917 阅读 · 0 评论 -
torch.nn.BCELoss
文章目录1. torch.nn.BCELoss2. torch.nn.BCEWithLogitsLoss1. torch.nn.BCELoss之前介绍过torch.nn.CrossEntropyLoss,这个函数既可以用来计算二分类,也可以用来计算多分类,这两个函数是有区别的,CrossEntropyLoss函数中结合了LogSoftmax以及NLLLOSS,下面介绍一下torch.nn.BCELoss,这里说明以下BCELoss并没有结合前面的非线性函数torch.nn.BCELossInput原创 2021-10-02 21:36:31 · 1974 阅读 · 0 评论