刘二大人《Pytorch深度学习实践》第八讲加载数据集

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 DataLoader

class 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.len

dataset = 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 hat
        return x
 
 
model = 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 = data
    y_pred = model (inputs)
    loss = criterion (y_pred, labels)
    print (epoch, i, loss.item())

    optimizer.zero_grad()
    loss.backward ()
    optimizer.step()

torchvision中数据集的加载

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值