文章目录
1.前言
Pytorch 中提供了一种帮你整理你的数据结构的好东西, 叫做 DataLoader, 我们能用它来包装自己的数据, 进行批训练。
2.DataLoader
DataLoader 是 torch 给你用来包装你的数据的工具. 所以你要将自己的 (numpy array 或其他) 数据形式装换成 Tensor, 然后再放进这个包装器中. 使用 DataLoader 有什么好处呢? 就是他们帮你有效地迭代数据
import torch
from torch.utils.data import DataLoader, TensorDataset
torch.manual_seed(1)
BATCH_SIZE = 4 #意味着一个epoch有两个迭代
x = torch.linspace(1,20,20)
y = torch.linspace(20,1,20)
torch_dataset = TensorDataset(x,y)
loader = DataLoader(
dataset = torch_dataset,
batch_size = BATCH_SIZE,
shuffle = True,
num_workers = 4
)
for epoch in range(3):
for step , (batch_x, batch_y) in enumerate(loader): #stepb表示一个eopch中的迭代次数
print('Epoch:',epoch, '|Step:',step,'|batch x:',batch_x.numpy(),'|batch y:',batch_y.numpy() )
可以看出, 每步都导出了4个数据进行学习. 然后每个 epoch 的导出数据都是先打乱了以后再导出.(通过shuffle = True控制)
真正方便的还不是这点. 如果我们改变一下 BATCH_SIZE = 8, 这样我们就知道, step=0 会导出8个数据, 但是, step=2 时数据库中的数据不够 8个, 这时怎么办呢:
这时, 在 step=1 就只给你返回这个 epoch 中剩下的数据就好了.