文章目录
- Epoch、Batch-Size、Iterations
- Dataset、DataLoader
- 课上代码
- torchvision中数据集的加载
Epoch、Batch-Size、Iterations
1、所有的训练集进行了一次前向和反向传播,叫做一个Epoch
2、在深度学习训练中,要给整个数据集分成多份,即mini-batch,每个mini-batch所包含的样本的数量叫做Batch-Size
3、因为数据集分成了多个mini-batch,有多少份mini-batch就有多少个Iteration,每进行一次mini-batch的前向和后向传播,就会进行一次权重参数的更新,在一个Epoch中,有多少个Iteration,就更新了多少次权重参数
Dataset、DataLoader
1、DataSet 是抽象类,不能实例化对象,需要自己定义类继承该抽象类并实现其中的方法
2、init()函数里面主要用来加载数据集,分成x_data,y_data
3、__getitem()__主要根据下表来获取数据集
4、len() 主要用来返回数据集的个数
5、DataLoader是Pytorch中用来处理模型输入数据的一个工具类。组合了数据集(dataset) + 采样器(sampler),并在数据集上提供单线程或多线程(num_workers )的可迭代对象。在DataLoader中有多个参数,这些参数中重要的几个参数的含义说明如下:
1. epoch:所有的训练样本输入到模型中称为一个epoch; 2. iteration:一批样本输入到模型中,成为一个Iteration;3. batchszie:批大小,决定一个epoch有多少个Iteration;4. 迭代次数(iteration)=样本总数(epoch)/批尺寸(batchszie)5. dataset (Dataset) – 决定数据从哪读取或者从何读取;6. batch_size (python:int, optional) – 批尺寸(每次训练样本个数,默认为1)7. shuffle (bool, optional) –每一个 epoch是否为乱序 (default: False);8. num_workers (python:int, optional) – 是否多进程读取数据(默认为0);9. drop_last (bool, optional) – 当样本数不能被batchsize整除时,最后一批数据是否舍弃(default: False)10. pin_memory(bool, optional) - 如果为True会将数据放置到GPU上去(默认为false)
课上代码
import torch
import numpy as np
from torch.utils.data import Dataset
from torch.utils.data import DataLoaderclass DiabetesDataset (Dataset):def __init__(self):xy = np.loadtxt('diabetes.csv', delimiter=',', dtype = np.float32)self.len = xy.shape[0]self.x_data = torch.from_numpy (xy[:,:-1])self.y_data = torch.from_numpy (xy[:,[-1]])def __getitem__(self, index):return self.x_data[index], self.y_data[index]def __len__(self):return self.lendataset = DiabetesDataset()
train_loader = DataLoader (dataset=dataset, batch_size=32, shuffle=True, num_workers=0)class Model(torch.nn.Module):def __init__(self):super(Model, self).__init__()self.linear1 = torch.nn.Linear(8, 6) # 输入数据x的特征是8维,x有8个特征self.linear2 = torch.nn.Linear(6, 4)self.linear3 = torch.nn.Linear(4, 1)self.sigmoid = torch.nn.Sigmoid() # 将其看作是网络的一层,而不是简单的函数使用def forward(self, x):x = self.sigmoid(self.linear1(x))x = self.sigmoid(self.linear2(x))x = self.sigmoid(self.linear3(x)) # y hatreturn xmodel = Model()criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)for epoch in range (100):for i, data in enumerate (train_loader, 0):inputs, labels = datay_pred = model (inputs)loss = criterion (y_pred, labels)print (epoch, i, loss.item())optimizer.zero_grad()loss.backward ()optimizer.step()
torchvision中数据集的加载