48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import torch
|
|
import torchvision
|
|
from torch.utils.data import Dataset, DataLoader
|
|
import numpy as np
|
|
import math
|
|
|
|
class WineDataset(Dataset):
|
|
def __init__(self):
|
|
#data loading
|
|
xy = np.loadtxt('./data/wine/wine.csv', delimiter=',', dtype=np.float32, skiprows=1)
|
|
self.x = torch.from_numpy(xy[:,1:]) # n_samples x features
|
|
self.y = torch.from_numpy(xy[:,[0]]) # n_samples x 1
|
|
self.n_samples = xy.shape[0]
|
|
|
|
def __getitem__(self, idx):
|
|
return self.x[idx], self.y[idx]
|
|
|
|
def __len__(self):
|
|
return self.n_samples
|
|
|
|
dataset = WineDataset()
|
|
# first_data = dataset[0]
|
|
# features, labels = first_data
|
|
# print(features, labels)
|
|
batch_size = 4
|
|
dataloader = DataLoader(dataset=dataset, batch_size=batch_size, shuffle=True, num_workers=2)
|
|
|
|
# dataiter = iter(dataloader)
|
|
# data = dataiter.next()
|
|
# features, labels = data
|
|
# print(features, labels)
|
|
|
|
# dummy training loop
|
|
n_epochs = 2
|
|
total_samples = len(dataset)
|
|
n_iter = math.ceil(total_samples/batch_size)
|
|
print(total_samples, n_iter)
|
|
|
|
for epoch in range(n_epochs):
|
|
for i, (inputs, labels) in enumerate(dataloader):
|
|
# forward backward update
|
|
if (i+1) % 5 == 0:
|
|
print(f'Epoch {epoch+1}/{n_epochs}, step {i+1}/{n_iter}, inputs {inputs.shape}')
|
|
|
|
|
|
# pytorch built in datasets
|
|
# torchvision.datasets.MNIST()
|
|
# fashion-mnist, cifar, coco |