1.计算流程
# Implement a custom Dataset:
# inherit Dataset
# implement __init__ , __getitem__ , and __len__
数据链接
密码:yrit
2.Pytorch构造批处理数据
2.1.导入必要模块
import torch
from torch.utils.data import Dataset, DataLoader
import numpy as np
import math
2.2.定义数据类
class wineDataset(Dataset):
def __init__(self):
xy = np.loadtxt('./wine.csv', delimiter=',',dtype=np.float32,skiprows=1) #读取数据并跳过第一行
self.n_samples = xy.shape[0] #计算样本数
self.x_data = torch.from_numpy(xy[:,1:]) #数据
self.y_data = torch.from_numpy(xy[:,[0]]) #标签
def __getitem__(self, index): #取数据函数
return self.x_data[index], self.y_data[index]
def __len__(self): #计算样本大小函数
return self.n_samples
2.3.定义DataLoader
dataset = wineDataset() #实例化
train_loader = DataLoader(dataset=dataset, #一个迭代4个数据并且打乱
batch_size=4,
shuffle=True,
num_workers=2)
2.4.打印效果
num_epochs = 2
total_samples = len(dataset)
n_iterations = math.ceil(total_samples/4)
print(total_samples, n_iterations)
for epoch in range(num_epochs):
for i, (inputs, labels) in enumerate(train_loader):
if (i+1)%5 == 0:
print(f'Epoch:{epoch+1}/{num_epochs}, Step {i+1}/{n_iterations} | Inputs {inputs.shape} | Labels{labels.shape}')