PyTorch Tutorial 09 - Dataset and Dat...

教程Python代碼如下:
"""
epoch = 1 forward and backward pass of ALL training samples
batch_size = numberlof training samples in one forward & backward pass
number of iterations = number of passes,each pass using [batch_size] number of samples
e.g. 100 samples,batch_size=20 --> 100/20 = 5 iterations for 1 epoch
"""
import torch
import torchvision
from torch.utils.data import Dataset, DataLoader
import numpy as np
import math
#實(shí)現(xiàn)自己的自定義數(shù)據(jù)集
class WineDataset():
??def __init__(self):
????# data loading, 數(shù)據(jù)加載
????xy = np.loadtxt('./Data/wine.csv',delimiter=",", dtype=np.float32, skiprows=1) #delomiter分隔符,skiprows=1跳過(guò)第一行(第一行為標(biāo)題)
????# 把數(shù)據(jù)集分成 x 和 y
????self.x = torch.from_numpy(xy[:,1:]) #不要第一行
????self.y = torch.from_numpy(xy[:, [0]]) # n_samples, 1:只要第一列,這樣就有了樣品的大小數(shù)
????self.n_samples = xy.shape[0]
??def __getitem__(self, index):
????# dataset[0], 允許以后進(jìn)行索引,所以我們可以調(diào)用索引為0的數(shù)據(jù)集
????return self.x[index], self.y[index]
??def __len__(self):
????# len(dataset), 調(diào)用數(shù)據(jù)集的長(zhǎng)度
????return self.n_samples
dataset = WineDataset()
# firat_data = dataset[0]
# features, labels = firat_data
# print(features, labels)
# 使用數(shù)據(jù)加載器
dataloader = DataLoader(dataset = dataset, batch_size=4, shuffle=True, num_workers=0)
"""
datatiter = iter(dataloader)
data = next(datatiter)
features, labels = data
print(features, labels)
"""
# training loop
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(dataloader):
????#forward, backward, updata
????if (i+1) % 5 == 0:
??????print(f'epoch {epoch+1}/{num_epochs}, step {i+1}/{n_iterations}, inputs {inputs.shape}')