Dataset and DataLoader

**Revision:Manual date feed:

  • Batch
  • Stochastic Gradient Descent

Terminology:Epoch,Batch-size,Lierations:

#Training cycle:
for epoch in range(training_epochs):
	#Loop overt all batchs:
	for i in range(total_batchs):

***Definition:Lteration: Numbers of passes,each passing using [batch size]number of examples.

DataLoader:batch-size=2,shuffle=True

need:index and len shuffle:打乱顺序 Loader:几个一组做成一个可以迭代的Loader分别是几个Batch

How to define your Dataset

import torch
from torch.utils.dara import Dataset
from torch.utils.data import DataLoader#DataLoader is a class to help us loading data in Pytorch

class DiabetesDataset(Dataset:)
	def __init__(self):
		pass
	#The expression,dataset[index],will call this magic function.
	def __getitem__(self,index):
		pass
	#This magic function returns the length of dataset
	def __len__(self):
		pass
#Initilize loader with batch-size,shuffle,process number
dataset=DiabetesDataset()
train_loader=DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)

**如果数据集本身不够大 那么我们就将其直接读到内存中 如果处理图像语音这种非结构性的数据 这时候我们就要想我们能不能给他加载到内存当中

for epoch in range(100):
	for i,data in enumerate(train_loader,0):
	#The implementation of multiprocessing is defferent on Wh=indows,which uses spawn instead of fork So left code will cause:

**So we have to warp the code with an if-clause to protect the code from executing multiple times.

if __name__=='_mian_':
	for epoch in range(100):
		for i,data in enumerate(train_loader,0):
			#1.Prepare data
class DiabetesDataset(Dataset):
	def __init__(self,filepath):
	xy=np.loader(filepath,delimiter=',',dtype=np.float32)
	self.len=xy.shape[0]
	self.x_data=torch.from_numpy(xy[:,:[-1]])
	self.y_data=torch.form_numpy(xy[:,[-1]])
	
	def __getitrm__(self,index):
		return self.x_data[index],self.y_data[index]
	def __lem__(self):
		return self,len
dataset=DiabetesDataset('diabetes.csv.gz')
train_loader=DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)
#training cycle:
for epoch in range(100):
	for i,data in enumerate(train_loader,0):
	#Prepare data:
	inputs,labels=data
	#Forward:
	y_pred=model(inputs)
	loss=criterion(y_pred,labels)
	print(epoch,i,loss.item())
	#Backward
	optimizer.zero_grad()
	loss.backward()
	#Update
	optimizer.step()

**Classifying Diabetes:

The following dataset loaders are available:

MNIST Fashion-MNIST EMNIST COCO LSUN ImageFolder DatasetFolder Imagenet-12 CIFAR STL10 PhotoTour

torchvision.datasets

import torch
from torch.utils.data import Dataloader
from torchvision import transforms
from torchvision import datasets

train_dataset=dataset.MNIST(root='../dataset/mnist',train=True,transform=transforms.ToTensor(),download=True)
test_dataset=datasets.MNIST(root='../dataset/mnist',train=False,transform=transforms.ToTensor(),download=True)
train_loader=DataLoader(dataset=train_dataset,batch_size=32,shuffle=True)
test_loader=DataLoader(dataset=test_dataset,batch_size=32,shuffle=False)
for batch_idx,(inputs,target)in enumerate(train_loader):

Exercise:

**Build Dataloader for Titanic dataset:[https://www.kaggle.com/c/titanic/data] Build a classifier using the Dataloader