Pytorch系列学习
主要介绍本人使用pytorch写深度学习代码的时候,遇到的困难及相关知识学习。
TEn%
因为自己淋过雨,所以想给别人撑把伞。
展开
-
pytorch学习(十六)to(device) 和.cuda()的用法
看pytorch官方给的代码,to(device)的时候可以指定GPU设备号。二者没啥太大区别,都可以用。cuda = torch.device('cuda') # Default CUDA devicecuda0 = torch.device('cuda:0')cuda2 = torch.device('cuda:2') # GPU 2 (these are 0-indexed)x = torch.tensor([1., 2.], device=cuda0)# x.device is原创 2021-07-10 17:03:32 · 9781 阅读 · 0 评论 -
Pytorch学习(十五)squeeze()和unsqueeze()的用法
squeeze()函数用于压缩维度,unsqueeze()用于扩充维度。1. unsqueeze()用法介绍unsqueeze()函数用于扩充维度,它有一个参数unsqueeze(dim),表示在第dim维上扩充维度。下面的代码中arr维度是(2,3,4),在第0维进行扩充,代码第三行维度是(1,2,3,4),通过第四行代码的输出结果可以看出,输出张量与原张量不共享内存,可通过第五行arr = arr.unsqueeze(0)来改变arr维度。arr = torch.arange(1, 25).vi原创 2021-05-22 15:41:10 · 703 阅读 · 0 评论 -
Pytorch学习(十三)python中*args和**kwargs的用法
1. python中*args和**kwargs的用法*args和 **kwargs经常在函数定义中被使用,用来传递可变长参数。*args表示任意多个无名参数,是一个tuple,**kwargs表示关键字参数,是一个dict。当*args和 **kwargs同时是使用时,*args参数列表要放在 **kwargs前边。举例如下:# 测试*args和**kwargsdef func(*args, **kwargs): print("args = ", args) print("kwa原创 2021-05-15 14:17:15 · 4536 阅读 · 1 评论 -
Pytorch学习(十二)pytorch中.data, .item()和.detach的用法
待完成… …原创 2021-05-15 13:39:09 · 1254 阅读 · 0 评论 -
Pytorch学习(十一)Pytorch中.item()的用法
我第一次接触.item()是在做图像分类任务中,计算loss的时候。total_loss = total_loss + loss.item()1. .item()的用法.item()用于在只包含一个元素的tensor中提取值,注意是只包含一个元素,否则的话使用.tolist()x = torch.tensor([1])print(x.item())y = torch.tensor([2,3,4,5])print(y.item())# 输出结果如下1---------------------原创 2021-05-12 17:15:16 · 26477 阅读 · 4 评论 -
Pytorch学习(十)Pytorch中常用的损失函数
1. torch.nn.CrossEntropyLossCrossEntropyLoss的作用相当于将nn.LogSoftmax()和nn.NLLLoss()结合在一起,nn.LogSoftmax()相当于先对输入矩阵计算softmax值,然后取log。举例说明这几个函数的功能:(1)使用nn.Softmax() + torch.log()来模拟nn.LogSoftmax()import torchimport torch.nn as nn# 随机生成输入input = torch.randn原创 2021-05-12 15:51:37 · 1380 阅读 · 0 评论 -
Pytorch学习(九)Pytorch中CPU和GPU的Tensor转换,Tensor和ndarray的转换及.cuda(non_blocking=True)的作用
1. 设置训练模型的GPU设备的方式device = torch.device("cuda:1" )model = model.to(device)2. CPU和GPU上Tensor的比较该部分参考自来自达摩院大神的讲解PyTorch中的数据类型为Tensor,Tensor与Numpy中的ndarray类似,同样可以用于标量,向量,矩阵乃至更高维度上面的计算。PyTorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda(原创 2021-05-11 22:08:14 · 16627 阅读 · 0 评论 -
Pytorch学习(八)读取数据集的方式汇总
待完成。。。原创 2021-05-11 20:33:05 · 292 阅读 · 0 评论 -
Pytorch学习(七)torchvision.datasets.ImageFolder的用法
待写。。。原创 2021-05-11 20:31:20 · 473 阅读 · 1 评论 -
Pytorch学习(六)Dataset, DataLoader,Sampler的理解
1. DatasetDataset表示的是静态的数据集,DataLoader的侧重点在于Loader加载器,将Dataset中的数据按照一定的规则加载到神经网络中2. DataLoader用法详解DataLoader类涉及到的参数如下:torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, p原创 2021-05-09 20:43:01 · 705 阅读 · 0 评论 -
Pytorch学习(四)Transforms用法学习
1. Transforms该如何使用?Transforms用来对输入图片的格式及样式做一些改变,使用时需要注意图像的输入格式:PIL格式---->Image.open()ndarray------>cv.imread()转换成Tensor格式-------->ToTensor()from PIL import Imagefrom torchvision.transforms import transformsimg_path = "dataset/facades/tra原创 2021-05-09 10:53:39 · 400 阅读 · 2 评论 -
Pytorch学习(五)内置函数__init__()和__call__()函数的使用
根据下面的代码可以看出,call()函数不用显示调用,而是使用对象初始化的方式来调用。class Person: def __call__(self, name): print("__call__" + " hello " + name) def hello(self, name): print("hello ", name)p = Person()p("Amy")p.hello("Mike")# 结果如下:__call__ hello Am原创 2021-05-08 19:16:41 · 1304 阅读 · 1 评论 -
Pytorch学习(三)self.modules()和self.children()的用法
通过代码来学习self.modules()和self.children()的用法.1. self.children()和self.modules()测试代码import torchimport torch.nn as nn input_nc = 3hide1_nc = 6hide2_nc = 6output_nc = 3 class Net(nn.Module): def __init__(self, input_nc, hide1_nc, hide2_nc, output_nc原创 2021-05-06 16:21:48 · 1989 阅读 · 1 评论 -
Pytorch学习(二)Pytorch对声明的网络结构进行初始化及‘ConvBlockInit‘ object has no attribute ‘weight‘错误出现原因分析
通常使用pytorch在一个类的__init__()函数中声明完网络结构后,pytorch会自动初始化待训练的网络结构的权值。但这种初始化过程是随机的,参数分布没有规律且相差较大,使得网络收敛速度下降。因此,我们手动初始化权重,可以采用服从正态分布的数据来初始化权重。1. 方法一:先定义网络,后初始化权重def weights_init_normal(m): # 初始化权重 classname = m.__class__.__name__ if classname.find("C原创 2021-05-06 10:13:13 · 4085 阅读 · 5 评论 -
nn.Sequential(*layers)中*的用法及错误TypeError: list is not a Module subclass
这里主要涉及一些nn.Sequential()的用法,nn.Sequential()是一个顺序容器,将神经网络的相关操作进行封装。1. nn.Sequential()容器定义从nn.Sequential()的定义来看,输入要么是orderdict,要么是一系列的模型,遇到list,必须用*号进行转化,否则会报错 TypeError: list is not a Module subclass2. nn.Sequential()的几种构造方法简单的顺序构造import torch.nn as原创 2021-05-04 22:14:03 · 6106 阅读 · 0 评论 -
nn.AdaptiveAvgPool2d() 与 nn.AvgPool2d() 模块各自的用途
首先介绍一下我为啥会关注到这个问题,因为我在使用加了SE模块的Resnet的时候,程序出bug了,原来问题出在我使用了nn.AvgPool2d() ,而应该使用nn.AdaptiveAvgPool2d() 。1. 问题下边是我写的SEResnet模块的代码,然后我会贴出我程序报的错误:class SEResNet(nn.Module): def __init__(self, block, layers, num_classes=1000): self.inplanes = 6原创 2020-12-16 21:16:07 · 3304 阅读 · 0 评论 -
使用torch.load()加载文件时,报错_pickle.UnpicklingError: could not find MARK
我试图用torch.load()加载.csv文件,想想都觉得自己的操作很蠢,与其说蠢,不如说掌握的知识少。接下来进入正题:1. torch.load的用法torch.load()是用来加载torch.save()存储的对象的方法。load()使用Python的unpickling工具,但是专门处理存储,它是张量的基础。他们首先在CPU上并行化,然后移动到保存它们的设备。如果失败(例如,因为运行时系统没有某些设备),就会引发异常。所以我用DataFrame.to_csv()保存在.csv文件中的信息不原创 2020-11-22 14:27:37 · 7004 阅读 · 0 评论 -
pytorch学习(一)pytorch中的断点续训
1. 设置断点续训的目的在遇到停电宕机,设备内存不足导致实验还没有跑完的情况下,如果没有使用断点续训,就需要从头开始训练,耗时费力。断点续训主要保存的是网络模型的参数以及优化器optimizer的状态(因为很多情况下optimizer的状态会改变,比如学习率的变化)2. 设置断点续训的方法参数设置resume: 是否进行续训initepoch: 进行续训时的初始epochcheckpoint载入过程(这部分操作放在epoch循环前边)resume = True # 设置是否需要原创 2020-11-19 16:25:50 · 6492 阅读 · 7 评论