Pytorch中DataLoader的使用[通俗易懂]

Pytorch中DataLoader的使用[通俗易懂]前言最近开始接触pytorch,从跑别人写好的代码开始,今天需要把输入数据根据每个batch的最长输入数据,填充到一样的长度(之前是将所有的数据直接填充到一样的长度再输入)。刚开始是想偷懒,没有去认真了解输入的机制,结果一直报错…还是要认真学习呀!加载数据pytorch中加载数据的顺序是:①创建一个dataset对象②创建一个dataloader对象③循环dataloader对象,将data,label拿到模型中去训练dataset你需要自己定义一个class,里面至少包含3个函数:①_

大家好,又见面了,我是你们的朋友全栈君。

前言

最近开始接触pytorch,从跑别人写好的代码开始,今天需要把输入数据根据每个batch的最长输入数据,填充到一样的长度(之前是将所有的数据直接填充到一样的长度再输入)。
刚开始是想偷懒,没有去认真了解输入的机制,结果一直报错…还是要认真学习呀!

加载数据

pytorch中加载数据的顺序是:
①创建一个dataset对象
②创建一个dataloader对象
③循环dataloader对象,将data,label拿到模型中去训练

dataset

你需要自己定义一个class,里面至少包含3个函数:
①__init__:传入数据,或者像下面一样直接在函数里加载数据
②__len__:返回这个数据集一共有多少个item
③__getitem__:返回一条训练数据,并将其转换成tensor

import torch
from torch.utils.data import Dataset
class Mydata(Dataset):
    def __init__(self):
        a = np.load("D:/Python/nlp/NRE/a.npy",allow_pickle=True)
        b = np.load("D:/Python/nlp/NRE/b.npy",allow_pickle=True)
        d = np.load("D:/Python/nlp/NRE/d.npy",allow_pickle=True)
        c = np.load("D:/Python/nlp/NRE/c.npy")
        self.x = list(zip(a,b,d,c))
    def __getitem__(self, idx):
        
        assert idx < len(self.x)
        return self.x[idx]
    def __len__(self):
        
        return len(self.x)

dataloader

参数:
dataset:传入的数据
shuffle = True:是否打乱数据
collate_fn:使用这个参数可以自己操作每个batch的数据

dataset = Mydata()
dataloader = DataLoader(dataset, batch_size = 2, shuffle=True,collate_fn = mycollate)

下面是将每个batch的数据填充到该batch的最大长度

def mycollate(data):
a = []
b = []
c = []
d = []
max_len = len(data[0][0])
for i in data:
if len(i[0])>max_len:
max_len = len(i[0])
if len(i[1])>max_len:
max_len = len(i[1])
if len(i[2])>max_len:
max_len = len(i[2])
print(max_len)
# 填充
for i in data:
if len(i[0])<max_len:
i[0].extend([27] * (max_len-len(i[0])))
if len(i[1])<max_len:
i[1].extend([27] * (max_len-len(i[1])))
if len(i[2])<max_len:
i[2].extend([27] * (max_len-len(i[2])))  
a.append(i[0])
b.append(i[1])
d.append(i[2])
c.extend(i[3])
# 这里要自己转成tensor
a = torch.Tensor(a)
b = torch.Tensor(b)
c = torch.Tensor(c)
d = torch.Tensor(d)
data1 = [a,b,d,c]
print("data1",data1)
return data1

结果:
在这里插入图片描述

最后循环该dataloader ,拿到数据放入模型进行训练:

 for ii, data in enumerate(test_data_loader):
if opt.use_gpu: 
data = list(map(lambda x: torch.LongTensor(x.long()).cuda(), data)) 
else: 
data = list(map(lambda x: torch.LongTensor(x.long()), data))
out = model(data[:-1]) #数据data[:-1]
loss = F.cross_entropy(out, data[-1])# 最后一列是标签

写在最后:建议像我一样刚开始不太熟练的小伙伴,在处理数据输入的时候可以打印出来仔细查看。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133122.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • MySQL下载与安装

    MySQL下载与安装MySQL下载与安装一、下载地址:https://dev.mysql.com/downloads/mysql/当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip二、安装MySQL安装文件分两种.msi和.zip,.msi需要安装zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进行环境变量配置zip格式是自己解压我…

  • WPA2协议新攻击方法(KRACK)—WPA2密钥重安装漏洞[通俗易懂]

    WPA2协议新攻击方法(KRACK)—WPA2密钥重安装漏洞[通俗易懂]KeyReinstallationAttacksBreakingWPA2byforcingnoncereuse今年9月份CCS公布了一篇新论文,该论文提出了一种新的攻击方法:KeyReinstallationAttacks,这种攻击方法对WPA2危害甚大。本文简单介绍该攻击方法。我们都知道所有WiFi网络都是靠WiFiProtectedAccess协议的某个实现版

  • python多线程tomorrow的使用

    python多线程tomorrow的使用安装pipinstalltomorrow使用:在需要多线程执行的方法上打上注解@threads(2)即可@threads(5)defmethod_001(i):print(i)if__name__==’__main__’:foriinrange(0,100):method_001(i)报错:async关键字冲突,这是python3才会报的错。解决:修改方法名…

  • swagger @ApiModel @ApiModelProperty注解属性说明「建议收藏」

    @ApiModel使用场景:在实体类上边使用,标记类时swagger的解析类。概述:提供有关swagger模型的其它信息,类将在操作中用作类型时自动内省。用法:@ApiModel(value=“ShopVo”,description=“商铺信息”)@ApiModelProperty使用场景:使用在被@ApiModel注解的模型类的属性上。表示对model属性的说明或者数据操作更改。概述:添加和操作模型属性的数据。用法:@ApiModelProperty(value=“

  • webstorm 格式化代码(CTR+ALT+L)快捷键失效?

    webstorm 格式化代码(CTR+ALT+L)快捷键失效?使用CTR+ALT+L格式化代码时,会去执行QQ的快捷键,从而导致webstorm的快捷键失效解决方法是,将QQ的快捷键去除或更改:转载于:https://www.cnblogs.com/pfcan66/p/11270117.html…

  • 【全网首发】言简意赅的Python全套语法,内附详细知识点和思维导图!【强烈建议收藏!】

    【全网首发】言简意赅的Python全套语法,内附详细知识点和思维导图!【强烈建议收藏!】Python是近几年比较火热的编程语言,至于有多火热?偶尔打开微信公众号,页面下面弹出的是《Python训练营》,打开朋友圈发现有推荐学习Python的课程,打开CSDN,发现热榜第一又是Python推荐文章,不得不说Python的影响力在目前还是比较大的,这和Python社区的宣传力度有着密切的关系!目前学习Python的人有多少呢?那些人在学习Python呢?至于这个问题,我认为没有一个准确的答案,因为每一天学习Python的人都在增加,学习Python被越来越多的人注重,所以要回答这个问题,最好的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号