Pytorch:EDSR 生成训练数据的方法
引言
Winter is coming
正文
pytorch
提供的DataLoader
是用来包装你的数据的工具. 所以你要将自己的 (numpy array 或其他)
数据形式装换成 Tensor
, 然后再放进这个包装器中. 使用 DataLoader
有什么好处呢?
就是他们帮你有效地迭代数据, 举例:
import torch
import torch.utils.data as Data #utils是torch中的一个模块,Data是进行小批训练的途径或模块
x = torch.linspace(1, 10, 10) # x data (torch tensor): 初始的数据
y = torch.linspace(10, 1, 10) # y data (torch tensor): 目标的数据
- 先转换成
torch
能识别的Dataset
torch_dataset = Data.TensorDataset(data_tensor=x, target_tensor=y)
torch_dataset
为用 torch
定义的一个数据库,然后将要训练的数据放到数据库中。
x为用来训练的数据,y为用于算误差的数据
- 把
dataset
放入DataLoader
BATCH_SIZE = 5 # 批训练大小为五,即每次抽取五个数据进行训练
loader = Data.DataLoader(
dataset=torch_dataset, # torch TensorDataset format
batch_size=BATCH_SIZE, # mini batch size
shuffle=True, # 要不要打乱数据 (打乱比较好)
num_workers=2, # 多线程来读数据,更有效率
)
我们使用 DataLoader()
来使我们的训练过程变成一批一批,shuffle
是 Bool
型变量,为真时随机打乱数据后进行抽样
for epoch in range(3): # 训练整套数据 3 次
for step, (batch_x, batch_y) in enumerate(loader):
# 每一步loader释放一小批数据用来学习,因为一组总共有10个data,batch_size又为5,所以训练一次数据有2个step
# 假设这里就是你训练的地方...
# 打出来一些数据
print('Epoch: ', epoch, '| Step: ', step, '| batch x: ', batch_x.numpy(), '| batch y: ', batch_y.numpy())
结果如下:
Epoch: 0 | Step: 0 | batch x: [ 6. 7. 2. 3. 1.] | batch y: [ 5. 4. 9. 8. 10.]
Epoch: 0 | Step: 1 | batch x: [ 9. 10. 4. 8. 5.] | batch y: [ 2. 1. 7. 3. 6.]
Epoch: 1 | Step: 0 | batch x: [ 3. 4. 2. 9. 10.] | batch y: [ 8. 7. 9. 2. 1.]
Epoch: 1 | Step: 1 | batch x: [ 1. 7. 8. 5. 6.] | ba