训练心得与Pytorch实践
文章平均质量分 77
训练心得与Pytorch实践
Hali_Botebie
这个作者很懒,什么都没留下…
展开
-
Function与Module的差异与应用场景,symbolic() 和 forward() 是什么关系?
在使用自定义操作时,如果操作可以用图形表示(例如,乘法、加法等),那么应该提供symbolic方法。在这个例子中,我们定义了一个简单的操作,它返回输入的平方。在深度学习框架中各自扮演着不同的角色,但它们都是模型定义和计算过程中的关键部分。它们之间的关系主要体现在它们各自的作用以及在整个模型定义和计算流程中的位置。在PyTorch中,自定义操作可以通过继承torch.autograd.Function类来实现,同时需要实现该操作的符号(symbolic)表示。原创 2024-03-21 17:23:36 · 249 阅读 · 0 评论 -
位置参数(Positional Arguments)和关键字参数(Keyword Arguments)
位置参数(Positional Arguments)和关键字参数(Keyword Arguments)在函数调用和定义时扮演着不同的角色,它们的主要区别体现在以下方面:传递方式:位置参数:通过参数在函数定义和函数调用中的位置来传递值。它们按照在函数定义中出现的顺序来接收值。例如,在函数 def func(a, b): 中,a 和 b 都是位置参数。在调用 func(1, 2) 时,1 传递给 a,2 传递给 b。关键字参数:通过参数名来传递值,而不管它们在函数定义中的位置如何。原创 2024-03-20 18:12:50 · 390 阅读 · 0 评论 -
【可变形卷积4】 可变形卷积、动态卷积等新型卷积,真如论文中说的那么好用吗?
如何几行代码替换常规卷积层并涨点?可变形卷积、动态卷积等新型卷积,真如论文中说的那么好用吗?PP-YOLO:CenterNet也也是类似做法。似乎大部分网络,都可以把最后几层conv换成可变形卷积?除了轻微增加推断速度,有的硬件不支持,有没有其他缺点(诸如对某些场景泛化性差)?转载 2023-08-17 16:50:55 · 321 阅读 · 0 评论 -
【可变形卷积3】 DCNv2 安装
(1)github上最新版的DCNv2源码在"https://github.com/CharlesShang/DCNv2",但是该版本源码不支持PyTorch1.7,如果使其支持PyTorch1.7需要做以下修改:将DCNv2/src/cuda/dcn_v2_cuda.cu中所有的THCState_getCurrentStream(state)替换成c10::cuda::getCurrentCUDAStream()。原创 2023-08-17 16:44:55 · 1032 阅读 · 0 评论 -
【可变形卷积2】可变形卷积原理解读
考虑到传统卷积必须是方方正正的 k × k 的卷积核,作者认为这个感受野太规则,无法很好地捕捉特殊形状的特征,因此在其基础上加了偏置:如上图所示,传统的卷积输入只能是图 (a) 中的九个绿点,而在加上偏移量之后,皆可以四处飞,比如飞到图 (bcd) 中蓝点的位置。转载 2023-08-17 16:35:53 · 278 阅读 · 0 评论 -
【可变形卷积1】可变形卷积pytorch版本解读
可变形卷积在网络结构书写时,需要经过以下两步。转载 2023-08-17 16:35:34 · 448 阅读 · 0 评论 -
【pytorch损失函数(6)】Focal loss, for dense object detection再分析
之前翻译了这篇,但是理解还不深。今天借着研究rotation的计划,回顾这篇文章。原创 2023-05-24 10:25:41 · 647 阅读 · 0 评论 -
【pytorch损失函数(5)】nn.NLLLoss, negative log likelihood loss,负对数似然损失
NLLLoss: negative log likelihood loss,负对数似然损失。确实没搞清楚这个公式跟对数有什么关系,看公式就是取每行对应列别的值。转载 2023-05-24 09:13:05 · 263 阅读 · 0 评论 -
【mmdetection】mmdetection 开启tensorboard
将dict(type=‘TextLoggerHook’)注释掉,去掉dict(type=‘TensorboardLoggerHook’)的注释即可。mmdetection 默认是不开启tensorboard的,如果你想要打开,首先找到。转载 2023-05-18 08:36:11 · 349 阅读 · 0 评论 -
Pytorch——余弦相似度、欧式距离(PairwiseDistance,vector_norm,cdist)
设a,b分别为两个tensor。转载 2023-05-06 11:37:29 · 2635 阅读 · 0 评论 -
【pytorch损失函数(1)】之nn.BCELoss二进制交叉熵和 nn.BCEWithLogitsLoss
可以看出梯度都与sigmoid函数的梯度有关,如下图所示,sigmoid函数在两端的梯度均接近0,这导致反向传播的梯度也很小,这就这就不利于网络训练,这就是 梯度消失问题。在面对不同的分类问题的时候,选择的loss function也不一样,二分类和多标签分类通常使用sigmoid函数而多分类则一般使用softmax函数(互斥性质)。目标值 y的范围是0-1之间。的到的一个一个样本的分类结果,这个结果的通俗解释就是:为第一类的概率为0.2,为第二类的概率为0.5,为第三类的结果过0.3。原创 2023-05-06 10:43:03 · 6033 阅读 · 0 评论 -
【pytorch损失函数(3)】nn.L1Loss()和nn.SmoothL1Loss()
平均绝对误差(MAE)是一种用于回归模型的损失函数。MAE 是目标变量和预测变量之间绝对差值之和,因此它衡量的是一组预测值中的平均误差大小,而不考虑它们的方向,范围为 0~∞。上图为平均绝对误差函数图,其中目标真值为 100,预测范围在-10000 到 10000 之间,均方 误差损失(Y 轴)在预测值(X 轴)=100 处有最小值,范围为 0~∞。主要问题:导数为常数,在 Loss 函数最小值处容易震荡,导致难以收敛到最优值。原创 2023-05-06 09:49:33 · 1749 阅读 · 0 评论 -
【pytorch损失函数(4)】nn.MSELoss,(Mean Squared Error,MSE) 均方误差(MSE)(squared L2 norm,平方L2范数)。它也被称为L2 Loss。
它也被称为L2 Loss。上图为均方误差函数图,其中目标真值为 100,预测范围在-10000 到 10000 之间,均方 误差损失(Y 轴)在预测值(X 轴)=100 处有最小值,范围为 0~∞。可以看出梯度都与sigmoid函数的梯度有关,如下图所示,sigmoid函数在两端的梯度均接近0,这导致反向传播的梯度也很小,这就这就不利于网络训练,这就是梯度消失问题。导数变化,不稳定,尤其是在早期阶段(损失越大,导数越大),随着导数越来越小, 训练速度变得越来越慢。原创 2023-05-06 09:32:33 · 2883 阅读 · 0 评论 -
训练的提速技巧——可视化工具篇
训练大型的数据集的速度受很多因素影响,由于数据集比较大,每个优化带来的时间提升就不可小觑。硬件方面,CPU、内存大小、GPU、机械硬盘orSSD存储等都会有一定的影响。软件实现方面,PyTorch本身的DataLoader有时候会不够用,需要额外操作,比如使用混合精度、数据预读取、多线程读取数据、多卡并行优化等策略也会给整个模型优化带来非常巨大的作用。那什么时候需要采取这篇文章的策略呢?那就是明明GPU显存已经占满,但是显存的利用率很低。转载 2023-04-26 11:03:31 · 209 阅读 · 0 评论 -
PyTorch学习笔记 ——上采样和PixelShuffle
去年曾经使用过FCN(全卷积神经网络)及其派生Unet,再加上在爱奇艺的时候做过一些超分辨率重建的内容,其中用到了毕业于帝国理工的华人博士Shi Wenzhe(在Twitter任职)发表的PixelShuffle《Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network》的论文。PyTorch 0.4.1将这些上采样的方式定义为Vision Laye转载 2022-03-29 19:45:19 · 6587 阅读 · 0 评论 -
pytorch中torch.max和F.softmax函数的维度解释
看到一段代码def split_prediction(tensor, shape, split): tensor = F.interpolate(tensor, size=shape, mode='bilinear', align_corners=False).squeeze() heatmaps, rooms, icons = torch.split(tensor, split, 0) icons = F.softmax(icons, 0) rooms = F.soft转载 2021-10-28 08:27:12 · 1382 阅读 · 0 评论 -
pytorch自定义初始化权重
在常见的pytorch代码中,我们见到的初始化方式都是调用init类对每层所有参数进行初始化。但是,有时我们有些特殊需求,比如用某一层的权重取优化其它层,或者手动指定某些权重的初始值。核心思想就是构造和该层权重同一尺寸的矩阵去对该层权重赋值。但是,值得注意的是,pytorch中各层权重的数据类型是nn.Parameter,而不是Tensor或者Variable。import torchimport torch.nn as nnimport torch.optim as optimimport nu转载 2021-06-09 15:04:14 · 557 阅读 · 0 评论 -
pytorch中的反卷积的output_padding参数
nn.ConvTranspose2d()在传入参数时除了常见的输入输出通道数、卷积核尺寸等,还会有一个稍微令人费解的参数:output_padding这个参数在做步长为1的反卷积时是不用在意的。然而当步长大于1了,就需要手动设置以免网络出错。1.思考卷积过程因为例如在valid模式下7×7的输入尺寸+步长为2+卷积核3×3 = 3×3输出尺寸。8×8的输入尺寸+步长为2+卷积核3×3 = 3×3输出尺寸。因为使用了 地板除(floor)这个原则实现2.反卷积过程3×3 的输入进行步长转载 2021-06-09 15:02:44 · 2345 阅读 · 0 评论 -
【深入理解Batch Normalization(2)】BN=批归一化+缩放位移=(batchNorm层+scale层)
1. BN的是做什么的。它其实做了两件事:(1)批量归一化: 输入归一化x_norm = (x-u)/std,其中u和std是个累计计算的均值和方差。(2)缩放与位移:y = alpha*x_norm+beta,对归一化后的x进行比例缩放和位移。其中的alpha和beta是通过迭代学习得到的。可以看出:批量归一化共有三个参数:均值、方差和滑动系数。由于BN的三个参数都是来自于样本的计算,不需要学习.参数可以有如下使用渠道:使用保存的均值和方差,采用滑动平均计算新的均值和方差滑动平均转载 2021-06-03 09:30:48 · 644 阅读 · 0 评论 -
Pytorch和caffe对maxpool模式ceil比较
背景:pytorch转caffe ,有层不支持,设计层需要求同存异。首先看看pytorch中max pooling的定义如下:class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)pytorchclass Net(nn.Module): def __init__(self): super(Net, sel原创 2021-05-20 10:43:48 · 1196 阅读 · 0 评论 -
PyTorch 中,nn 与 nn.functional 有什么区别?
https://www.zhihu.com/question/66782101两者的相同之处:nn.Xxx和nn.functional.xxx的实际功能是相同的,即nn.Conv2d和nn.functional.conv2d 都是进行卷积,nn.Dropout 和nn.functional.dropout都是进行dropout,。。。。。;运行效率也是近乎相同。nn.functional.xxx是函数接口,而nn.Xxx是nn.functional.xxx的类封装,并且nn.Xxx都继承于一个共同祖转载 2021-05-19 14:27:13 · 311 阅读 · 0 评论 -
【Caffe】caffe框架讲解,解析修改caffemodel与prototxt
背景pytorch转onnx后,onnx转tensorRT 各种问题。主要是TX2安装的tensorRT版本较低,也没有去刷机升级的想法。尝试了 onnx-tensorRT 以及torch2trt 项目,完全没心思搞了。还是按照标准流程 转caffe 然后部署到tensorRT ,TX2也有官方支持的caffe的脚本。参考1、Pytorch模型转Caffe模型小记https://zhuanlan.zhihu.com/p/352750171得到了pytorch2caffe工具: github.c转载 2021-05-19 10:08:52 · 4365 阅读 · 0 评论 -
pytorh——Fully-connected
首先我们明白全连接层的组成如下 那么全连接层对模型影响参数就是三个:全接解层的总层数(长度)单个全连接层的神经元数(宽度)激活函数首先我们要明白激活函数的作用是:增加模型的非线性表达能力参考https://www.zhihu.com/question/41037974...转载 2021-03-08 15:41:15 · 2184 阅读 · 0 评论 -
pytorch ——torch.optim.Adam
class torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)它在Adam: A Method for Stochastic Optimization中被提出。(https://arxiv.org/abs/1412.6980)参数:params (iterable) – 待优化参数的iterable或者是定义了参数组的dictlr (float, 可选) – 学习率(默认:1e-3)b转载 2021-03-06 16:00:52 · 6843 阅读 · 0 评论 -
【pytorch损失函数(2)】CrossEntropyLoss交叉熵CE
基于Pytorch实现,nn.CrossEntropyLoss(),是nn.logSoftmax()和nn.NLLLoss()的整合,可以直接使用它来替换网络中的这两个操作(此标准将LogSoftMax和NLLLoss集成到一个类中)。sigmoid对应的CE函数的反向传播就是在看我们预测值与真实值之间的差异,因此,sigmoid+CE也可以用于做数值的回归,因为反向传播本身,就是计算这两者的差异。x向量(预测)和目标分布(在错误类上为0,在正确类上为1的 one-hot 向量)表示。原创 2021-03-06 14:52:50 · 1692 阅读 · 1 评论 -
【深入理解Batch Normalization(3)】pytorch——nn.BatchNorm2d()函数
https://blog.csdn.net/bigFatCat_Tom/article/details/91619977https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/#normalization-layers-sourcehttps://blog.csdn.net/t20134297/article/details/104960101基本原理对小批量(mini-batch)3d数据组成的4d[batch转载 2021-03-04 14:31:16 · 2948 阅读 · 1 评论 -
PyTorch——nn.Conv2d和其中的padding策略,Caffe、Tensorflow的padding策略
caffe偷偷摸摸地把一行0补在上面 或者 把一列0补在左边,tensorflow正好镜像对称,把一行0补在下面或者把一列0补在右边。这就是导致输出对齐不了的原因,前面几层输出的feature map的中间还能勉强对上,随着网络结构的加深,到fc之前已经完全对不上了。也就是说: caffe的padding策略是把0补在左上。 tensorflow的padding策略是把0补在右下。转载 2021-03-04 14:06:10 · 1366 阅读 · 1 评论 -
torchvision中Transform的normalize参数含义, 自己计算mean和std,可视化后的情况,其他必要的数据增强方式
文章目录疑问1:疑问2 ,如何得到[0-1]的图像疑问3:PIL.Image/numpy.ndarray与Tensor的相互转换疑问4 :PIL.Image的缩放裁剪等操作其他必要的数据增强方式参考:一下是一个常用的Normalize的代码normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])mean就是均原创 2021-03-04 09:52:28 · 9848 阅读 · 4 评论 -
详解PyTorch中的ModuleList和Sequential
在使用PyTorch的时候,经常遇到nn.Sequential和nn.ModuleList,今天将这两个模块认真区分了一下,总结如下。PyTorch版本为1.0.0。https://zhuanlan.zhihu.com/p/75206669nn.Sequential与nn.ModuleList简介nn.Sequentialnn.Sequential里面的模块按照顺序进行排列的,所以必须确保前一个模块的输出大小和下一个模块的输入大小是一致的。如下面的例子所示:#首先导入torch相关包import转载 2021-03-04 08:50:33 · 1014 阅读 · 1 评论 -
1月13 PyTorch 中模型的使用,保存加载模型
神经网络训练后我们需要将模型进行保存,要用的时候将保存的模型进行加载,PyTorch 中保存和加载模型主要分为两类:保存加载整个模型只保存加载模型参数https://zhuanlan.zhihu.com/p/73893187一、保存加载模型基本用法1、保存加载整个模型保存整个网络模型(网络结构+权重参数)。torch.save(model, 'net.pkl')直接加载整个网络模型(可能比较耗时)。model = torch.load('net.pkl')2、只保存加载模型参数转载 2021-03-03 11:11:50 · 213 阅读 · 0 评论 -
3月3 pytorch模型保存的.pt, .pth, .pkl的pytorch模型文件,只是后缀不同而已(仅此而已),打开方式
pytorch模型保存的格式。首先讲讲保存模型或权重参数的后缀格式,权重参数和模型参数的后缀格式一样,pytorch中最常见的模型保存使用 .pt 或者是 .pth 作为模型文件扩展名。还有其他的保存数据的格式为.t7或者.pkl格式。t7文件是沿用torch7中读取模型权重的方式,而pth文件是python中存储文件的常用格式,而在keras中则是使用.h5文件 。我们经常会看到后缀名为.pt, .pth, .pkl的pytorch模型文件,这几种模型文件在格式上有什么区别吗?其实它们并不是在格式上有转载 2021-03-03 11:07:05 · 7430 阅读 · 0 评论 -
pytorch与resnet(六) 预训练模型使用的场景
声明:该部分为转载参考简单来说,预训练模型(pre-trained model)是前人为了解决类似问题所创造出来的模型。你在解决问题的时候,不用从零开始训练一个新模型,可以从在类似问题中训练过的模型入手。场景一:数据集小,数据相似度高(与pre-trained model的训练数据相比而言)在这种情况下,因为数据与预训练模型的训练数据相似度很高,因此我们不需要重新训练模型。我们只需要将输出层改制成符合问题情境下的结构就好。我们使用预处理模型作为模式提取器。比如说我们使用在ImageNet上训练的模转载 2021-03-03 11:05:22 · 2455 阅读 · 0 评论 -
PyTorch1.4安装-进入官网安装时最靠谱的
https://blog.csdn.net/weixin_39450145/article/details/105078795安装PyTorch1.4(Python3.6 + conda安装cpu版本)进入PyTorch官网https://pytorch.org/,选择后可以看到如下图的现成的安装命令:(然后运行此命令即可。)运行下面这条命令即可:conda install pytorch torchvision cpuonly -c pytorch...原创 2020-10-30 17:06:45 · 422 阅读 · 0 评论 -
9月29日 卷积神经网络的发展历程
AlexNet卷积神经网络取得的第一个进步是AlexNet网络,它是在2012年提出的。这里有一些关键的改进:它提出了ReLu,也就是有助于防止消失的梯度问题;它也引入了dropout的概念,使得每层中神经元随机地打开和关闭,防止过拟合。如果你的数据过于相似,它不能够对相似但不同的图像进行分类,因为它过拟合了你的训练数据。因此dropout是一种防止过拟合的正则化技术,通过随机地打开和关闭神经元,数据被迫寻找新的路径,因为它被迫寻找新的路径,网络能够更好地泛化;卷积网络也引入了数据增强的想法,Alex.原创 2020-10-30 17:05:12 · 721 阅读 · 0 评论 -
09月28日 pytorch与resnet(五) 转移学习
1. Training a Custom Classifier based on a Quantized Feature Extractor量化特征提取器转载 2020-10-30 17:04:02 · 254 阅读 · 1 评论 -
09月28日 pytorch与resnet(四)三种主要的转移学习方案,微调ConvNet,ConvNet 作为固定特征提取器
实际上,很少有人从头开始训练整个卷积网络(使用随机初始化),因为拥有足够大小的数据集相对很少。 相反,通常在非常大的数据集上对 ConvNet 进行预训练(例如 ImageNet,其中包含 120 万个具有 1000 个类别的图像),然后将 ConvNet 用作初始化或固定特征提取器以完成感兴趣的任务。https://cs231n.github.io/transfer-learning/三种主要的转移学习方案:对卷积网络进行微调:代替随机初始化,我们使用经过预训练的网络初始化网络,例如在 image转载 2020-10-30 17:03:43 · 769 阅读 · 0 评论 -
09月28日 pytorch与resnet(三)预训练的Mask R-CNN 模型进行微调
TorchVision 对象检测微调教程1. 预训练的Mask R-CNN 模型进行微调我们将说明如何在 torchvision 中使用新功能,以便在自定义数据集上训练实例细分模型。2. 定义数据集https://pytorch.org/tutorials/intermediate/torchvision_tutorial.htmlPenn-Fudan 数据库中对行人检测和分割。 数据集应继承自标准torch.utils.data.Dataset类,并实现__len__和__getitem__。转载 2020-10-30 17:02:48 · 949 阅读 · 0 评论 -
09月27日 pytorch与resnet(二)
首先使用 numpy 实现网络。Numpy 提供了一个 n 维数组对象,以及许多用于操纵这些数组的函数。 Numpy 是用于科学计算的通用框架。 它对计算图,深度学习或梯度一无所知。 但是,我们可以使用 numpy 操作手动实现通过网络的前向和后向传递,从而轻松地使用 numpy 使两层网络适合随机数据:# -*- coding: utf-8 -*-import numpy as np# N is batch size; D_in is input dimension;# H is hidden转载 2020-10-30 17:02:29 · 108 阅读 · 0 评论 -
09月23日 pytorch与resnet(一)
pytorch作为NumPy的替代品,可以利用GPU的性能进行计算作为一个高灵活性、速度快的深度学习平台张量Tensor(张量)类似于NumPy的ndarray,但还可以在GPU上使用来加速计算。from __future__ import print_functionimport torchx = torch.empty(5, 3)print(x)x = torch.rand(5, 3)print(x)x = torch.zeros(5, 3, dtype=torch.lo转载 2020-10-30 17:02:08 · 267 阅读 · 0 评论