202107-26 pytorch lstm gru rnn 得到每个state输出的操作 默认只返回最后一个state,所以一次输入一个step的input#coding=UTF-8importtorchimporttorch.autogradasautograd#torch中自动计算梯度模块importtorch.nnasnn#神经网络模块torch.manual_seed(1)#lstm单元输入和输出维度都是3lstm=nn.LSTM(input_size=3,hidden_size=3)#生成一个长度为5,每一个元素为1*3的序列作为输入,这里的数字3对应于上句中第一个3inputs=[autograd.Variable(torch.randn((1,3)))... 继续阅读 >
202107-26 浅谈pytorch中为什么要用 zero_grad() 将梯度清零 pytorch中为什么要用zero_grad()将梯度清零调用backward()函数之前都要将梯度清零,因为如果梯度不清零,pytorch中会将上次计算的梯度和本次计算的梯度累加。这样逻辑的好处是,当我们的硬件限制不能使用更大的bachsize时,使用多次计算较小的bachsize的梯度平均值来代替,更方便,坏处当然是每次都要清零梯度。optimizer.zero_grad()output=net(input)loss=loss_f(output,target)loss.backward()补充:Pytorch为什么每一... 继续阅读 >
202107-26 聊聊pytorch中Optimizer与optimizer.step()的用法 当我们想指定每一层的学习率时:optim.SGD([{'params':model.base.parameters()},{'params':model.classifier.parameters(),'lr':1e-3}],lr=1e-2,momentum=0.9)这意味着model.base的参数将会使用1e-2的学习率,model.classifier的参数将会使用1e-3的学习率,并且0.9的momentum将会被用于所有的参数。进行单次优化所有的optimizer都实现了step()方法,这个方法会更... 继续阅读 >
202107-26 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]:好像是表示优化器的状态的一个字典;importtorchimporttorch.optimasoptimh2w1=torch.randn(3,3)w1.requires_grad=Truew2=torch.randn(3,3)w2.requires_grad=Trueo=optim.Adam([w1])p... 继续阅读 >
202107-22 pytorch 如何把图像数据集进行划分成train,test和val 1、手上目前拥有数据集是一大坨,没有train,test,val的划分如图所示2、目录结构:|---data|---dslr|---images|---back_pack|---a.jpg|---b.jpg...3、转换后的格式如图目录结构为:|---datanews|---dslr|---images|---test|---train|---valid|---back_pack|---a.jpg|---b.j... 继续阅读 >
202107-22 解决pytorch load huge dataset(大数据加载) 问题最近用pytorch做实验时,遇到加载大量数据的问题。实验数据大小在400Gb,而本身机器的memory只有256Gb,显然无法将数据一次全部load到memory。解决方法首先自定义一个MyDataset继承torch.utils.data.Dataset,然后将MyDataset的对象feedintorch.utils.data.DataLoader()即可。MyDataset在__init__中声明一个文件对象,然后在__getitem__中缓慢读取数据,这样就不会一次把所有数据加载到内存中了。训练数据存放在train.txt中... 继续阅读 >
202107-22 解决pytorch rnn 变长输入序列的问题 pytorch实现变长输入的rnn分类输入数据是长度不固定的序列数据,主要讲解两个部分1、Data.DataLoader的collate_fn用法,以及按batch进行padding数据2、pack_padded_sequence和pad_packed_sequence来处理变长序列collate_fnDataloader的collate_fn参数,定义数据处理和合并成batch的方式。由于pack_padded_sequence用到的tensor必须按照长度从大到小排过序的,所以在Collate_fn中,需要完成两件事,一是把当前batch的样本按照当前ba... 继续阅读 >
202107-22 Pytorch 如何训练网络时调整学习率 为了得到更好的网络,学习率通常是要调整的,即刚开始用较大的学习率来加快网络的训练,之后为了提高精确度,需要将学习率调低一点。如图所示,步长(学习率)太大容易跨过最优解。代码如下:表示每20个epoch学习率调整为之前的10%optimizer=optim.SGD(gan.parameters(),lr=0.1,momentum=0.9,weight_decay=0.0005)lr=... 继续阅读 >
202107-22 对pytorch中不定长序列补齐的操作 第二种方法通常是在load一个batch数据时,在collate_fn中进行补齐的.以下给出两种思路:第一种思路是比较容易想到的,就是对一个batch的样本进行遍历,然后使用np.pad对每一个样本进行补齐.forunitindata:mask=np.zeros(max_length)s_len=len(unit[0])#calculatethelengthofsequenceineachunitmask[:s_len]=1unit[0]=np.pad(unit[0],(0,max_length-s_len),'constant... 继续阅读 >
202107-22 pytorch 实现多个Dataloader同时训练 看代码吧~如果两个dataloader的长度不一样,那就加个:fromitertoolsimportcycle仅使用zip,迭代器将在长度等于最小数据集的长度时耗尽。但是,使用cycle时,我们将再次重复最小的数据集,除非迭代器查看最大数据集中的所有样本。补充:pytorch技巧:自定义数据集torch.utils.data.DataLoader及Dataset的使用本博客中有可直接运行的例子,便于直观的理解,在torch环境中运行即可。1.数据传递机制在pytorch中数据传递按一... 继续阅读 >
202107-22 基于PyTorch实现一个简单的CNN图像分类器 目录一.加载数据1.继承Dataset类并重写关键方法2.使用Dataloader加载数据二.模型设计三.训练四.测试结语pytorch中文网:https://www.pytorchtutorial.com/pytorch官方文档:https://pytorch.org/docs/stable/index.html一.加载数据Pytorch的数据加载一般是用torch.utils.data.Dataset与torch.utils.data.Dataloader两个类联合进行。我们需要继承Dataset来定义自己的数据集类,然后在训练时用Dataloader加载自定义的数据集类... 继续阅读 >
202107-22 pytorch 6 batch_train 批训练操作 看代码吧~importtorchimporttorch.utils.dataasDatatorch.manual_seed(1)#reproducible#BATCH_SIZE=5BATCH_SIZE=8#每次使用8个数据同时传入网路x=torch.linspace(1,10,10)#thisisxdata(torchtensor)y=torch.linspace(10,1,10)#thisisydata(torchtensor)torch_dataset=Data.TensorDataset(x,y)loader=Data.DataLoader(dataset=torch_dataset,#torchTens... 继续阅读 >
202107-22 pytorch 如何使用batch训练lstm网络 batch的lstm#导入相应的包importtorchimporttorch.nnasnnimporttorch.nn.functionalasFimporttorch.optimasoptimimporttorch.utils.dataasDatatorch.manual_seed(1)#准备数据的阶段defprepare_sequence(seq,to_ix):idxs=[to_ix[w]forwinseq]returntorch.tensor(idxs,dtype=torch.long)withopen("/home/lstm_train.txt",encoding='utf8')asf:train_data=[]word=[]label... 继续阅读 >
202107-22 使用Pytorch实现two-head(多输出)模型的操作 如何使用Pytorch实现two-head(多输出)模型1.two-head模型定义先放一张我要实现的模型结构图:如上图,就是一个two-head模型,也是一个但输入多输出模型。该模型的特点是输入一个x和一个t,h0和h1中只有一个会输出,所以可能这不算是一个典型的多输出模型。2.实现所遇到的困难一开始的想法:这不是很简单嘛,做一个判断不就完了,t=0时模型为前半段加h0,t=1时模型为前半段加h1。但实现的时候傻眼了,发现在真正前向传播的时候t... 继续阅读 >
202107-22 解决Pytorch dataloader时报错每个tensor维度不一样的问题 使用pytorch的dataloader报错:RuntimeError:stackexpectseachtensortobeequalsize,butgot[2]atentry0and[1]atentry11.问题描述报错定位:位于定义dataset的代码中def__getitem__(self,index):...returny#此处报错报错内容File"D:\python\lib\site-packages\torch\utils\data\_utils\collate.py",line55,indefault_collatereturntorch.stack(batch,0,out=out)RuntimeError:stackexpectseac... 继续阅读 >
202107-22 pytorch中DataLoader()过程中遇到的一些问题 如下所示:RuntimeError:stackexpectseachtensortobeequalsize,butgot[3,60,32]atentry0and[3,54,32]atentry2train_dataset=datasets.ImageFolder(traindir,transforms.Compose([transforms.Resize((224))###原因是transforms.Resize()的参数设置问题,改为如下设置就可以了train_dataset=datasets.ImageFolder(traindir,transforms.Compose([transforms.Resize((22... 继续阅读 >