Dataloader自定义数据集

Dataloader自定义数据集在这里插入图片描述

一般情况下所有的数据集都存放在一个文件夹中,如train,不会进行分类存放。这时需要一个txt、xml或者json格式文件记录图像及其对应的结果标签,如下图所示,每一行对应一条数据,包含输入图像的路径名称,以及输出的结果(这里为类别),两者用空格间隔。
在这里插入图片描述
在这里插入图片描述

ann_file表示txt、xml文件路径,strip()去掉换行符等,readlines()一行一行读取数据(一般一行为一条数据)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自定义Dataloader,其中构造函数init和getitem是必须要重写,init函数的主要目的是获取数据部分和标签部分并分别用list存储。getitem函数主要目的是随机返回tensor数据类型的某个增强后的数据及其标签,torch.form_numpy()将数据转为tensor。
数据增强在Dataloader进行增强,可通过构造函数传入设定的transform增强。
在这里插入图片描述
在这里插入图片描述
shuffle=True打乱数据。
在这里插入图片描述
iter(train_loader).next()每一次从train_loader中取一个batch的数据。
squeeze()压缩,如image的大小为batch_sizexCxHxW,通过next(),一次取一个batch数据的大小为1xCxHxW,squeeze()将维度压缩为CxHxW。
permute()将图片维度从CxHxW转为HxWxC,numpy()将数据从tensor转为array,其目的都是为了满足plt去显示图像。

参考:
https://ke.gupaoedu.cn

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,数据集加载完成后,我们通常会使用dataloader来准备数据,以便于模型训练。dataloader可以帮助我们对数据进行批量处理、乱序、并行读取等操作,提高模型训练效率。 以文本数据集为例,我们可以先将每个文本转换成数字序列,并将所有文本序列对齐到相同长度,然后将所有文本序列打包成batch,供模型训练使用。具体操作可以参考以下代码: ```python import torch.utils.data as data from torch.nn.utils.rnn import pad_sequence import numpy as np class TextDataset(data.Dataset): def __init__(self, data): self.data = data self.tokenizer = Tokenizer() def __getitem__(self, index): # 将文本转换成数字序列 text = self.data[index] tokens = self.tokenizer.tokenize(text) ids = self.tokenizer.convert_tokens_to_ids(tokens) return ids def __len__(self): return len(self.data) def collate_fn(batch): # 将序列对齐到相同长度 lengths = [len(seq) for seq in batch] max_len = max(lengths) padded_seqs = [seq + [0]*(max_len-len(seq)) for seq in batch] padded_seqs = torch.LongTensor(padded_seqs) return padded_seqs, lengths # 加载数据集 data = ['text1', 'text2', 'text3', 'text4', 'text5'] dataset = TextDataset(data) dataloader = data.DataLoader(dataset, batch_size=2, shuffle=True, collate_fn=collate_fn, num_workers=0) # 使用dataloader训练模型 for batch in dataloader: inputs, lengths = batch outputs = model(inputs) loss = criterion(outputs, targets) optimizer.zero_grad() loss.backward() optimizer.step() ``` 在上面的代码中,我们自定义了一个TextDataset类,用于将文本数据转换成数字序列。在collate_fn函数中,我们将所有序列对齐到相同长度,并将它们打包成batch。最后使用DataLoader加载数据集,并传入collate_fn函数进行处理。 需要根据具体的数据集格式和模型需求来选择相应的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值