PyTorch中torch.utils.data.DataLoader简单介绍与使用方法
作者:想变厉害的大白菜 时间:2023-10-30 07:12:00
一、torch.utils.data.DataLoader 简介
作用:torch.utils.data.DataLoader 主要是对数据进行 batch 的划分。
数据加载器,结合了数据集和取样器,并且可以提供多个线程处理数据集。
在训练模型时使用到此函数,用来 把训练数据分成多个小组 ,此函数 每次抛出一组数据 。直至把所有的数据都抛出。就是做一个数据的初始化。
好处:
使用DataLoader的好处是,可以快速的迭代数据。
用于生成迭代数据非常方便。
注意:
除此之外,特别要注意的是输入进函数的数据一定得是可迭代的。如果是自定的数据集的话可以在定义类中用def__len__、def__getitem__定义。
二、实例
BATCH_SIZE 刚好整除数据量
"""
批训练,把数据变成一小批一小批数据进行训练。
DataLoader就是用来包装所使用的数据,每次抛出一批数据
"""
import torch
import torch.utils.data as Data
BATCH_SIZE = 5 # 批训练的数据个数
x = torch.linspace(1, 10, 10) # 训练数据
print(x)
y = torch.linspace(10, 1, 10) # 标签
print(y)
# 把数据放在数据库中
torch_dataset = Data.TensorDataset(x, y) # 对给定的 tensor 数据,将他们包装成 dataset
loader = Data.DataLoader(
# 从数据库中每次抽出batch size个样本
dataset=torch_dataset, # torch TensorDataset format
batch_size=BATCH_SIZE, # mini batch size
shuffle=True, # 要不要打乱数据 (打乱比较好)
num_workers=2, # 多线程来读数据
)
def show_batch():
for epoch in range(3):
for step, (batch_x, batch_y) in enumerate(loader):
# training
print("steop:{}, batch_x:{}, batch_y:{}".format(step, batch_x, batch_y))
show_batch()
输出结果:
tensor([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
tensor([10., 9., 8., 7., 6., 5., 4., 3., 2., 1.])
steop:0, batch_x:tensor([10., 1., 3., 7., 6.]), batch_y:tensor([ 1., 10., 8., 4., 5.])
steop:1, batch_x:tensor([8., 5., 4., 9., 2.]), batch_y:tensor([3., 6., 7., 2., 9.])
steop:0, batch_x:tensor([ 9., 3., 10., 1., 5.]), batch_y:tensor([ 2., 8., 1., 10., 6.])
steop:1, batch_x:tensor([2., 6., 8., 4., 7.]), batch_y:tensor([9., 5., 3., 7., 4.])
steop:0, batch_x:tensor([ 2., 10., 9., 6., 1.]), batch_y:tensor([ 9., 1., 2., 5., 10.])
steop:1, batch_x:tensor([8., 3., 4., 7., 5.]), batch_y:tensor([3., 8., 7., 4., 6.])
说明:共有 10 条数据,设置 BATCH_SIZE 为 5 来进行划分,能划分为 2 组(steop 为 0 和 1)。这两组数据互斥。
BATCH_SIZE 不整除数据量:会输出余下所有数据
将上述代码中的 BATCH_SIZE 改为 4 :
"""
批训练,把数据变成一小批一小批数据进行训练。
DataLoader就是用来包装所使用的数据,每次抛出一批数据
"""
import torch
import torch.utils.data as Data
BATCH_SIZE = 4 # 批训练的数据个数
x = torch.linspace(1, 10, 10) # 训练数据
print(x)
y = torch.linspace(10, 1, 10) # 标签
print(y)
# 把数据放在数据库中
torch_dataset = Data.TensorDataset(x, y) # 对给定的 tensor 数据,将他们包装成 dataset
loader = Data.DataLoader(
# 从数据库中每次抽出batch size个样本
dataset=torch_dataset, # torch TensorDataset format
batch_size=BATCH_SIZE, # mini batch size
shuffle=True, # 要不要打乱数据 (打乱比较好)
num_workers=2, # 多线程来读数据
)
def show_batch():
for epoch in range(3):
for step, (batch_x, batch_y) in enumerate(loader):
# training
print("steop:{}, batch_x:{}, batch_y:{}".format(step, batch_x, batch_y))
show_batch()
输出结果:
tensor([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
tensor([10., 9., 8., 7., 6., 5., 4., 3., 2., 1.])
steop:0, batch_x:tensor([1., 5., 3., 2.]), batch_y:tensor([10., 6., 8., 9.])
steop:1, batch_x:tensor([7., 8., 4., 6.]), batch_y:tensor([4., 3., 7., 5.])
steop:2, batch_x:tensor([10., 9.]), batch_y:tensor([1., 2.])
steop:0, batch_x:tensor([ 7., 10., 5., 2.]), batch_y:tensor([4., 1., 6., 9.])
steop:1, batch_x:tensor([9., 1., 6., 4.]), batch_y:tensor([ 2., 10., 5., 7.])
steop:2, batch_x:tensor([8., 3.]), batch_y:tensor([3., 8.])
steop:0, batch_x:tensor([10., 3., 2., 8.]), batch_y:tensor([1., 8., 9., 3.])
steop:1, batch_x:tensor([1., 7., 5., 9.]), batch_y:tensor([10., 4., 6., 2.])
steop:2, batch_x:tensor([4., 6.]), batch_y:tensor([7., 5.])
说明:共有 10 条数据,设置 BATCH_SIZE 为 4 来进行划分,能划分为 3 组(steop 为 0 、1、2)。分别有 4、4、2 条数据。
参考链接
torch.utils.data.DataLoader使用方法
【Pytorch基础】torch.utils.data.DataLoader方法的使用
来源:https://blog.csdn.net/weixin_44211968/article/details/123744513
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python Pygame实战之赛车游戏的实现
![](https://img.aspxhome.com/file/2023/1/135431_0s.png)
perl AnyEvent简单介绍和入门知识
Mysql学习之数据库检索语句DQL大全小白篇
![](https://img.aspxhome.com/file/2023/1/118451_0s.png)
在Python中等距取出一个数组其中n个数的实现方式
![](https://img.aspxhome.com/file/2023/4/86164_0s.jpg)
Sql Server里删除数据表中重复记录的例子
使用JS+XML(数据岛)实现分页)
Django在pycharm下修改默认启动端口的方法
![](https://img.aspxhome.com/file/2023/9/76689_0s.jpg)
Python获取对象属性的几种方式小结
自动定时重启sql server回收内存
python实现360皮肤按钮控件示例
联邦学习论文解读分散数据的深层网络通信
![](https://img.aspxhome.com/file/2023/9/109549_0s.png)
详解Python中的 type()函数
SQL2005CLR函数扩展-数据导出的实现详解
sqlserver中触发器+游标操作实现
Git远程操作详解
![](https://img.aspxhome.com/file/2023/2/109542_0s.jpg)
Python中Tkinter组件Menu的具体使用
![](https://img.aspxhome.com/file/2023/7/94147_0s.png)