pytorch
文章平均质量分 50
我是天才很好
深度学习算法工程师
github: https://github.com/wstchhwp
个人邮箱:1103540209@qq.com
展开
-
pytorch中文文档
pytorch中文文档原创 2019-12-05 09:12:31 · 419 阅读 · 0 评论 -
卷积、池化、反卷积、空洞卷积的输入输出大小计算公式
卷积对于卷积经过某层后的特征图大小计算方式:h2 = (h1-k+2p)/s + 1w2 = (w1-k+2p)/s + 1总结:卷积输出大小=[(输入大小-卷积核大小+2*Padding)/步长]+1所以当stride为1时,当卷积核的大小比padding的两倍大1时,可以不改变特征图的尺寸,只改变通道数。池化对于池化:H=(H-K)/S+1W=(W-K)/S+1总结:池化输出大小=[(输入大小-卷积核大小)/步长]+1反卷积反卷积输出大小(input_size-1)×strid转载 2021-03-19 14:25:55 · 2489 阅读 · 0 评论 -
Dice Loss与mIoU
Dice系数和mIoU是语义分割的评价指标,在这里进行了简单知识介绍。一、Dice系数1.1 概念理解Dice系数源于二分类,本质上是衡量两个样本的重叠部分,是一种集合相似度度量函数,该指标范围从0到1,其中“1”表示完整的重叠。 其计算公式为:其中 |X∩Y| 是X和Y之间的交集,|X|和|Y|分表表示X和Y的元素的个数,其中,分子的系数为2,是因为分母存在重复计算X和Y之间的共同元素的原因。对于语义分割问题而言,X-GT分割图像(Ground Truth),Y-Pred分割图像。看图一直观原创 2021-02-01 13:23:29 · 6204 阅读 · 1 评论 -
torch.nn.NLLLoss()与torch.nn.CrossEntropyLoss()
torch.nn.NLLLoss()class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')计算公式:loss(input, class) = -input[class]公式理解:input = [-0.1187, 0.2110, 0.7463],target = [1],那么 loss = -0.2110。个人理解:感觉像是把 target 转原创 2021-02-01 12:07:06 · 3571 阅读 · 1 评论 -
np.eye()
函数的原型:numpy.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.参数介绍:(1)N: int型,表示的是输出的行数(2)M: int型,可选项,输出的列数,如果没有就默认为N(3)k: int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。(4)dtype: 数据的类型,可选项,返回的数据的数据类型(5)order原创 2021-02-01 11:32:07 · 2407 阅读 · 0 评论 -
SENet
'''SENet in PyTorch.SENet is the winner of ImageNet-2017. The paper is not released yet.'''import torchimport torch.nn as nnimport torch.nn.functional as Fclass BasicBlock(nn.Module): def __init__(self, in_planes, planes, stride=1): sup原创 2021-01-15 21:18:34 · 308 阅读 · 0 评论 -
pytorch中 self.modules()和 self.children()的区别
本文主要讲述:self.modules()和self.children()的区别与联系在看一些pytorch文章讲述自定义参数初始化方式时,使用到了self.modules()和self.children()函数,觉得还是需要讲解一下的。不如直接看一下代码:import torchfrom torch import nn# hyper parametersin_dim=1n_hidden_1=1n_hidden_2=1out_dim=1class Net(nn.Module):转载 2021-01-07 14:24:22 · 2462 阅读 · 0 评论 -
查看Pytorch是否使用GPU
下面的命令可以帮助我们查看Pytorch是否使用GPU:# 返回当前设备索引torch.cuda.current_device()# 返回GPU的数量torch.cuda.device_count()# 返回gpu名字,设备索引默认从0开始torch.cuda.get_device_name(0)# cuda是否可用torch.cuda.is_available()我的结果是:参考文档pytorch中查看gpu信息怎么用 pytorch 查看 GPU 信息...转载 2021-01-03 11:02:02 · 16502 阅读 · 1 评论 -
基于Pytorch的目标检测数据加载
Pytorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchvision.transforms。这3个子包的具体介绍可以参考官网:http://pytorch.org/docs/master/torchvision/index.html具体代码可以参考github:https://github.com/pytorch/vision/tree/master/torchvisi转载 2020-12-29 16:34:29 · 1946 阅读 · 0 评论 -
Pytorch如何更新版本与卸载
今天我们主要汇总如何使用使用ubuntu,CentOS,Mac更新Pytorch和torchvision,以及如何查看当前python版本。本教程只汇集如何使用pip,conda更新以及卸载Pytorch和torchvision,希望对您有所帮助!一、更新Pytorch和torchvision1、使用Pip更新Pytorch和torchvision# 列举pip当前可以更新的所有安装包pip list --outdated --format=legacy# 更新pytorch和torchvisio原创 2020-10-13 11:02:00 · 8807 阅读 · 1 评论 -
torch.nn.Upsample实现上采样
参考链接: https://www.cnblogs.com/wanghui-garcia/p/11399053.html官方文档: https://pytorch.apachecn.org/docs/1.0/nn.htmltorch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)size:一个独立的元组,想要得到的输出尺寸scale_factor:可以为int和tuple,图像高度/宽度/深转载 2020-09-29 13:02:04 · 4838 阅读 · 0 评论 -
nn.Sequential()和nn.ModuleList()
对于CNN前馈神经网络,如果前馈一次写一个forward函数会有些麻烦,在此就有两种简化方式,ModuleList和Sequential。Sequential1 、模型建立方式(1)nn.Sequential()对象.add_module(层名,层class的实例)net1 = nn.Sequential()net1.add_module('conv', nn.Conv2d(3, 3, 3))net1.add_module('batchnorm', nn.BatchNorm2d(3))net1转载 2020-09-29 11:51:34 · 1684 阅读 · 0 评论 -
torch.cat()使用详解
官方文档torch.cat(inputs, dimension=0) → Tensor在给定维度上对输入的张量序列seq 进行连接操作。torch.cat()可以看做 torch.split() 和 torch.chunk()的反操作。参数:inputs (sequence of Tensors) – 可以是任意相同Tensor 类型的python 序列dimension (int, optional) – 沿着此维连接张量序列。cat() 函数可以通过下面例子更好的理解。官方例子>转载 2020-09-29 10:31:15 · 25600 阅读 · 0 评论 -
pytorch使用多GPU训练
官方代码文档如下:nn.DataParallel教程文档如下:tutorialtorch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0)该函数实现了在module级别上的数据并行使用,注意batch size要大于GPU的数量。参数 :module:需要多GPU训练的网络模型device_ids: GPU的编号(默认全部GPU)output_device:(默认是device_ids[0])dim:te转载 2020-09-17 10:19:05 · 3923 阅读 · 0 评论 -
Pytorch详解NLLLoss和CrossEntropyLoss
NLLLoss在图片单标签分类时,输入m张图片,输出一个m*N的Tensor,其中N是分类个数。比如输入3张图片,分三类,最后的输出是一个3*3的Tensor,举个例子:第123行分别是第123张图片的结果,假设第123列分别是猫、狗和猪的分类得分。可以看出模型认为第123张都更可能是猫。然后对每一行使用Softmax,这样可以得到每张图片的概率分布。这里dim的意思是计算Softmax的维度,这里设置dim=1,可以看到每一行的加和为1。比如第一行0.6600+0.0570+0.2830=1转载 2020-09-16 15:18:56 · 2948 阅读 · 0 评论 -
pytorch中torch.clamp()
torch.clamp(input, min, max, out=None) → Tensor将输入input张量每个元素的夹紧到区间 [min,max],并返回结果到一个新张量。操作定义如下: | min, if x_i < miny_i = | x_i, if min <= x_i <= max | max, if x_i > max如果输入是FloatTensor or DoubleTensor类型,则参数min,max 必须为实数,否则须为原创 2020-09-10 13:50:01 · 1226 阅读 · 0 评论 -
Pytorch中Tensor的类型转换
Pytorch中的Tensor常用的类型转换函数(inplace操作)train/eval过程中,打印loss信息data.item() ----> Tensor --> float数据类型转换在Tensor后加 .long(), .int(), .float(), .double()等即可,也可以用.to()函数进行转换。数据存储位置转换CPU张量 ----> GPU张量,使用data.cuda()GPU张量 ----> CPU张量,使用data.cp转载 2020-09-09 17:43:50 · 3434 阅读 · 0 评论 -
pytorch模型不同层设置不同的学习率
在目标检测的模型训练中, 我们通常都会有一个特征提取网络backbone, 例如YOLO使用的darknet SSD使用的VGG-16。为了达到比较好的训练效果, 往往会加载预训练的backbone模型参数, 然后在此基础上训练检测网络, 并对backbone进行微调, 这时候就需要为backbone设置一个较小的lr。class net(torch.nn.Module): def __init__(self): super(net, self).__init__()原创 2020-09-09 16:10:53 · 4060 阅读 · 1 评论 -
如何在PyTorch 中设定学习率衰减(learning rate decay)?
很多时候我们要对学习率(learning rate)进行衰减,下面的代码示范了如何每30个epoch按10%的速率衰减:def adjust_learning_rate(optimizer, epoch): """Sets the learning rate to the initial LR decayed by 10 every 30 epochs""" lr = args.lr * (0.1 ** (epoch // 30)) for param_group in optim转载 2020-09-09 15:55:18 · 1645 阅读 · 0 评论 -
pytorch中优化器optimizer.param_groups
optimizer.param_groups: 是长度为2的list,其中的元素是2个字典;optimizer.param_groups[0]: 长度为6的字典,包括[‘amsgrad’, ‘params’, ‘lr’, ‘betas’, ‘weight_decay’, ‘eps’]这6个参数;optimizer.param_groups[1]: 好像是表示优化器的状态的一个字典;参考:https://blog.csdn.net/AWhiteDongDong/article/details/1061原创 2020-09-09 15:38:06 · 16758 阅读 · 4 评论 -
RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the
RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same.torchsummary.summary( )中出现了上述错误,torchsummary是应用在pytorch中的一种结构表达方式。有两种方式可以更改上述错误:if __name__ == '__main__': model = fishnet99() torchsumma原创 2020-09-09 14:42:42 · 795 阅读 · 0 评论 -
利用PyTorch实现卷积神经网络
PyTorch中实现卷积的重要基础函数1、nn.Conv2d:nn.Conv2d在pytorch中用于实现卷积。nn.Conv2d( in_channels=32, out_channels=64, kernel_size=3, stride=1, padding=1,)1、in_channels为输入通道数。2、out_channels为输出通道数。3、kernel_size为卷积核大小。4、stride为步数。5、padding为padding原创 2020-09-09 13:56:27 · 2325 阅读 · 0 评论 -
pytorch中的net.eval和with torch_no_grad
两者区别在PyTorch中进行validation时,会使用model.eval()切换到测试模式,在该模式下,主要用于通知dropout层和batchnorm层在train和val模式间切换。在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会继续计算数据的mean和var等参数并更新。在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的m原创 2020-09-09 11:41:02 · 2484 阅读 · 0 评论 -
pytorch冻结部分参数训练另一部分
1)添加下面一句话到模型中for p in self.parameters(): p.requires_grad = False比如加载了resnet预训练模型之后,在resenet的基础上连接了新的模快,resenet模块那部分可以先暂时冻结不更新,只更新其他部分的参数,那么可以在下面加入上面那句话class RESNET_MF(nn.Module): def __init__(self, model, pretrained): super(RESNET_MF, s转载 2020-09-08 16:47:17 · 1190 阅读 · 0 评论 -
pytorch中IOU的计算
IOU又叫Jaccard。Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。公式:相交面积/(面积求和-相交面积)代码:import torchimport numpy as np""" We resize both tensors to [A,B,2] without new malloc: [A,2] -> [A,1,2] -> [A,B,2] [B,2] -> [1,B,2] -原创 2020-09-07 16:12:59 · 4339 阅读 · 2 评论 -
PyTorch中torch.linspace的详细用法
线性间距向量torch.linspace(start, end, steps=100, out=None) → Tensor返回一个1维张量,包含在区间start和end上均匀间隔的step个点。输出张量的长度由steps决定。参数:start (float) - 区间的起始点end (float) - 区间的终点steps (int) - 在start和end间生成的样本数out (Tensor, optional) - 结果张量例子#生成0到10的4个数构成的等差数列a = to转载 2020-09-04 16:29:51 · 3977 阅读 · 3 评论 -
Pytorch view() permute() contiguous() transpose()
原始tensorimport torch a = torch.Tensor([[[1,2,3],[4,5,6],[7,8,9]]])print(a)print(a.size())输出:tensor([[[1., 2., 3.],[4., 5., 6.],[7., 8., 9.]]])torch.Size([1, 3, 3])1.view()改变tensor的形状view() 的具体理解请见文章:pytorch中x = x.view(x.size(0), -1) 的理解b转载 2020-09-04 16:13:59 · 1680 阅读 · 0 评论 -
pytorch中stack和cat的区别
torch.cat((tensor1,tensor2), dim)将两个tensor连接起来,具体如何连接见下面例子x = torch.rand((2,2,3))y = torch.rand((2,2,3))print("x:",x)print("y:",y)print("dim=0:", torch.cat((x,y),dim=0))print("dim=1:", torch.cat((x,y), dim=1))print("dim=2:", torch.cat((x, y), dim=2原创 2020-09-04 15:35:21 · 2219 阅读 · 1 评论 -
with torch.no_grad(): 可显著减少显存占用
模型训练的时候,爆显存了,可以调整batch,对数据进行crop等等操作。今天发现一个模型,训练ok,每次测试的时候爆显存。开始以为是因为用了全图(1920x1080略大)进行inference,这是一方面。但后来发现忘了用with torch.no_grad():这导致模型运算的时候不能释放显存(记录了梯度信息),所以显存巨大。加了之后,用了不过3G显存就够了。确实inference不需要那么多显存的,以后记着这种不正常现象如何处理。一般训练不爆显存,测试也不会爆;训练时的显存占用远多于inferen转载 2020-09-04 15:27:13 · 2598 阅读 · 0 评论 -
pytorch加载模型时使用map_location来在CPU、GPU间辗转腾挪
假设我们只保存了模型的参数(model.state_dict())到文件名为modelparameters.pth, model = Net()cpu -> cpu或者gpu -> gpu:checkpoint = torch.load('modelparameters.pth')model.load_state_dict(checkpoint)cpu -> gpu 1torch.load('modelparameters.pth', map_location=lambda s转载 2020-09-04 15:00:54 · 1335 阅读 · 0 评论 -
PyTorch常用代码段合集
1. 基本配置导入包和版本查询import torchimport torch.nn as nnimport torchvisionprint(torch.__version__)print(torch.version.cuda)print(torch.backends.cudnn.version())print(torch.cuda.get_device_name(0))可复现性在硬件设备(CPU、GPU)不同时,完全的可复现性无法保证,即使随机种子相同。但是,在同一个设备上,应原创 2020-09-02 09:07:34 · 936 阅读 · 0 评论 -
Pytorch保留验证集上最好的模型
方法一:验证集的作用就是在训练的过程中监测是否训练过度,即过拟合。一般可以默认验证集的损失函数值由下降转向上升(即最小值)处,模型的泛化能力最好。min_loss_val = 10 # 任取一个大数best_model = Nonemin_epoch = 100 # 训练至少需要的轮数for epoch in range(args.epochs): loss_val, loss_acc = train(epoch) if epoch > min_epoch and los原创 2020-08-23 10:37:45 · 16540 阅读 · 5 评论 -
python类中的 __call__()方法运用
__call__()是一种magic method,在类中实现这一方法可以使该类的实例(对象)像函数一样被调用。默认情况下该方法在类中是没有被实现的。使用callable()方法可以判断某对象是否可以被调用。__call__()方法的作用其实是把一个类的实例化对象变成了可调用对象,也就是说把一个类的实例化对象变成了可调用对象,只要类里实现了__call__()方法就行。如当类里没有实现__call__()时,此时的对象p 只是个类的实例,不是一个可调用的对象,当调用它时会报错:‘Person’ objec原创 2020-08-22 21:11:43 · 20939 阅读 · 5 评论 -
基于PyTorch的目标检测数据增强
文章目录1. 简介2. 针对像素的数据增强3. 针对图像的数据增强3.1 随机镜像3.2 随机缩放3.3 随机裁剪4. 总结SSD 中的数据增强顺序如下(其中第 2 和 3 步以 0.5 的概率实施)数据类型和坐标转换ConvertFromInts(np.float32)ToAbsoluteCoords(bbox coordinates *width and *height accordingly),为下面的几何变换做准备像素内容变换(Photometric Distortions)随转载 2020-08-22 20:41:10 · 2454 阅读 · 3 评论 -
pytorch中GPU内存耗尽
Pytorch GPU运算过程中会出现:“cuda runtime error(2): out of memory”这样的错误。通常,这种错误是由于在循环中使用全局变量当做累加器,且累加梯度信息的缘故, 用官方的说法就是:"accumulate history across your training loop"。在默认情况下,开启梯度计算的Tensor变量是会在GPU保持他的历史数据的,所以在编程或者调试过程中应该尽力避免在循环中累加梯度信息。下面举个栗子:上代码:total_loss=0for转载 2020-08-22 18:00:36 · 4019 阅读 · 1 评论 -
Pytorch 张量维度
文章目录dim=0的标量dim=1的张量dim=2的张量dim=3的张量dim=4的张量计算Tensor中元素的数目Tensor类的成员函数dim() 可以返回张量的维度,shape属性与成员函数size() 返回张量的具体维度分量,如下代码定义了一个两行三列的张量:f = torch.randn(2, 3)print(f.dim())print(f.size())print(f.shape)输出结果:2torch.Size([2, 3])torch.Size([2, 3])dim=转载 2020-08-22 16:37:49 · 2531 阅读 · 0 评论 -
Pytorch实现Smooth L1 Loss(Huber)
简单版SSD网络中的SmoothL1LossLayer层借鉴于Fast R-CNN,用于计算smooth L1损失,其中的光滑L1函数如下:其导函数为:之所以称为光滑L1函数,是因为此函数处处可导,而原L1函数在x=0处是不可导的。smooth L1损失为:其中:yi=[yi1,yi2,....,yik]Ty_i = [y_{i1},y_{i2},....,y_{ik}]^Tyi=[yi1,yi2,....,yik]T为标签向量;y^i\hat{y}_iy^i为预测向量。带si原创 2020-08-22 11:21:33 · 10838 阅读 · 5 评论 -
Pytorch损失函数(nn.L1Loss、nn.SmoothL1Loss、nn.MSELoss 、nn.CrossEntropyLoss、nn.NLLLoss)
文章目录nn.L1Lossnn.SmoothL1Lossnn.MSELossnn.CrossEntropyLossnn.NLLLoss损失函数,是编译一个神经网络模型必须的两个参数之一,另一个是优化器。损失函数是指用于计算标签值和预测值之间差异的函数,常见的有多种损失函数可供选择,典型的有距离向量,绝对值向量等。nn.L1LossL1Loss 计算方法比较简单,原理就是取预测值和真实值的绝对误差的平均数。计算公式如下nn.SmoothL1Lossnn.SmoothL1Loss:计算分俩方面,当误转载 2020-07-27 20:56:28 · 6701 阅读 · 0 评论 -
Pytorch实现ResNet网络模型
文章目录0. Pytorch的nn.Conv2d()详解in_channelsout_channelskernel_sizestride = 1padding = 0dilation = 1groups = 1bias = Truepadding_mode = 'zeros'1. ResNet解决了什么问题2. ResNet原理及结构2.1 BasicBlock结构2.2 BottleNeck结构2.3 ResNet结构3. ResNet代码详解3.1 BasicBlock代码块3.2 BottleNeck原创 2020-07-27 20:08:38 · 6622 阅读 · 2 评论 -
Pytorch中的参数初始化
文章目录1. 参数初始化(Weight Initialization)1.1 常数初始化1.2 均匀分布初始化1.3 正态分布初始化1.4 Xavier均匀分布1.5 Xavier正态分布1.6 kaiming均匀分布1.7 kaiming正态分布1.8 单位矩阵初始化1.9 正交初始化1.10 稀疏初始化1.11 dirac1.12 计算增益calculate_gain2. 单层初始化3. 模型初始化Xavier InitializationHe et. al Initialization正交初始化(Or原创 2020-07-25 16:03:40 · 6386 阅读 · 2 评论