最主要的方法是:
data_loader = Data.DataLoader(
dataset=Data.TensorDataset(x, y), # 封装进Data.TensorDataset(tensor数据1,tensor数据2, ...)类的数据,可以为任意维度
batch_size=BATCH_SIZE, # 每个batch的大小,即每次取数据的大小
shuffle=True, # 要不要打乱数据 (打乱比较好)
num_workers=2, # 多进程(multiprocess)来读数据
)
案例
import torch
import torch.utils.data as Data
import pandas as pd
import numpy as np
def get_data():
"""生成 特征 X 与 label Y """
def get_tensor_from_pd(dataframe_series):
return torch.tensor(data=dataframe_series.values)
df = pd.DataFrame(data=np.random.randint(0, 10, size=(20, 5)))
y = pd.Series(np.random.randint(0, 2, 20))
return get_tensor_from_pd(df), get_tensor_from_pd(y)
if __name__ == '__main__': # 注意:如果loader中设置了num_workers!=0,即采用多进程来处理数据,运行含loader的操作必须在‘__main__’的范围内
torch.manual_seed(1) # 确定随机种子
# 生成数据集
x, y = get_data()
BATCH_SIZE = 6 # 每个batch的大小,即每次取出多少个数据
# 把 dataset 放入 DataLoader
data_loader = Data.DataLoader(
dataset=Data.TensorDataset(x, y), # 封装进Data.TensorDataset()类的数据,可以为任意维度
batch_size=BATCH_SIZE, # 每块的大小
shuffle=True, # 要不要打乱数据 (打乱比较好)
num_workers=2, # 多进程(multiprocess)来读数据
)
# 进行3轮训练(每次拿全部的数据进行训练)
for epoch in range(3):
# 在一轮中迭代获取每个batch(把全部的数据分成小块一块块的训练)
for step, (batch_x, batch_y) in enumerate(data_loader):
# 把 batch 数据打印出来
print("-----------------==================================================-----------------")
print('迭代次数Epoch: ', epoch, '| batch次数: ', step)
print('batch x值: ', batch_x, '| batch y值: ', batch_y)