【Pytorch深度学习实践】B站up刘二大人之Dataset&DataLoader-代码理解与实现(7/9)

开篇几句题外话:

  • 本节内容,主要是把数据集写成了一个类,这个类要继承Dataset类,有点像DIY一个数据集的感觉,只有自定义了之后,才能实例化,然后把之前直接在文件夹中读取数据的方式进行了修改;
  • 数据集类里面有三个函数,这三个函数较为固定,分别自己的作用;
    • 继承Dataset后我们必须实现三个函数:
      • __init__()是初始化函数,之后我们可以提供数据集路径进行数据的加载
      • getitem__()帮助我们通过索引找到某个样本
      • __len__()帮助我们返回数据集大小
  • 后面加载数据的DataLoader(注意L大写),直接可以调用对数据集类做了实例化的对象,即把他当做一个参数,传入DataLoader当中;

Lecture08 —— Dataset&DataLoader 加载数据集

说在前面:

  • 本节内容,主要是把数据集写成了一个类,这个类要继承Dataset类,有点像DIY一个数据集的感觉,只有自定义了之后,才能实例化,然后把之前直接在文件夹中读取数据的方式进行了修改;

  • 后面加载数据的DataLoader(注意L大写),直接可以调用对数据集类做了实例化的对象,即把他当做一个参数,传入DataLoader当中;

详细过程:

  • 本课程的主要任务是通过将原本简单的标量输入,升级为向量输入,构建线性传播模型:
    • 在导入数据阶段就有很大不同:
      • 数据集类里面有三个函数,这三个函数较为固定,分别自己的作用;
    • 继承Dataset后我们必须实现三个函数:
      • __init__()是初始化函数,之后只要提供数据集路径,就可以进行数据的加载,也就是说,传入init的参数,只要有一个文件路径就可以了;
      • getitem__()通过索引找到某个样本;
      • __len__()返回数据集大小;

完整代码:

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: 24_nemo
@file: 08_Dataset_and_DataLoader_handType.py
@time: 2022/04/11
@desc:
"""

import numpy as np
import torch
from torch.utils.data import Dataset, 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.gz')
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.linear1 = torch.nn.Linear(8, 6)
        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))
        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):
            # 1、导入数据
            inputs, labels = data
            # 2、前向传播
            y_hat = model(inputs)
            loss = criterion(y_hat, labels)
            print(epoch, i, loss.item())
            # 3、反向传播(为什么loss.backward这里不会自动补全?)
            optimizer.zero_grad()
            loss.backward()
            # 4、更新权重
            optimizer.step()

            if epoch % 30 == 1:
                y_pred_label = torch.where(y_hat >= 0.5, torch.tensor([1.0]), torch.tensor([0.0]))

                accuracy = torch.eq(y_pred_label, labels).sum().item() / labels.size(0)
                print("loss = ", loss.item(), "acc = ", accuracy)

在这里插入图片描述

上一篇:

【Pytorch深度学习实践】B站up刘二大人之MultipleDimensionLogisticRegressionModel-代码理解与实现(6/9)

下一篇:

【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)

目录:

【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度学习是一种机器学习的方法,通过多层神经网络来进行模式识别和预测。深度学习的原理是通过大量数据来训练神经网络的参数,使其能够学习到数据中的模式和规律。具体而言,深度学习通过前向传播和反向传播两个步骤来进行训练,前向传播是将输入数据通过神经网络计算得到输出结果,反向传播是根据输出结果和真实标签之间的误差来更新神经网络的参数。 PyTorch是一个开源的深度学习框架,它提供了丰富的工具和函数,用于构建和训练神经网络模型。PyTorch实践主要包括模型定义、数据处理、训练和验证等步骤。首先,我们需要定义模型的结构,选择合适的网络层和激活函数,并在PyTorch中进行模型建立。然后,我们需要对输入数据进行预处理,如数据归一化、图像增强等操作。接下来,通过设置损失函数和优化器,我们可以使用训练数据对模型进行训练,不断调整模型的参数,以最小化损失函数。在训练过程中,可以使用验证集对模型进行评估,以及调整超参数。最后,我们可以使用训练好的模型对新的数据进行预测。 代码下载方面,我们可以通过PyTorch官方网站或GitHub等代码托管平台来下载深度学习原理和PyTorch实践的相关代码。在官方网站上,我们可以找到文档、教程和示例代码,以及PyTorch的安装包。在GitHub上,有许多开源项目和教程,可以找到一些经典的深度学习模型的实现代码和示例。 总之,深度学习的原理是通过训练神经网络模型来实现数据的模式识别和预测,而PyTorch是一种开源的深度学习框架,提供了丰富的工具和函数,用于构建和训练模型。通过深度学习原理和PyTorch实践代码下载,我们可以学习和实践深度学习的理论和应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值