pytorch入门第七课——数据集加载器

前言

b站刘洪普老师的pytorch入门课笔记。记录学习。
本文内容为数据集的加载器示例。

Mini-Batch中常见的词汇:

1、Epoch:训练阶段一次前馈和方向传播
2、Batch-size:训练阶段一次前向和方向传播的训练样本的数量
3、Iteration:假设样本总数为1w,Batch-size为1000,那么Iteration = 10000/1000 = 10

import torch
from torch.utils.data import Dataset #Dataset是一个抽象类,不能实例化
from torch.utils.data import DataLoader#而DataLoader则可以实例化
 
class DiabetesDataset(Dataset):
    def _init_(self,filepath):
        xy = np.loadtxt(filepath,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.len
    
    
dataset = DiabetesDataset('diabetes.csv.ga')
train_loader = DataLoader(dataset = dataset,
                          batch_size = 32,
                          shuffle = True,
                          num_workers=2)
 
 
class Model(torch.nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        #self.linear = torch.nn.Linear(8,1)     #直接8维输入,1维输出的二分类模型 对应的w为8*1的向量。
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)    #从8->4->1维
 
        self.sigmoid = torch.nn.Sigmoid()     #这里的激活函数可以选择很多,也可以用Sign()、Linear()、ReLU()等。  要改成:self.activate = torch.nn.ReLU().
 
 
    def forward(self, x):
        # x = self.sigmoid(self.linear(x))    #直接输入8->1
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        return x
 
model = Model()
 
criterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
 
if _name_ == '_main_':
    for epoch in range(100):
        for i,data in enumerate(train_loader,0):  #这里的0表示从下标0开始训练
            #.准备数据 ,inputs相当于x,labels相当于y
            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()

你可能感兴趣的:(机器学习,pytorch,数据集加载器)