Dataloader加载数据集

文章目录

  • 回顾
  • Epoch, Batch-Size, Iterations
  • 糖尿病 Dataset 构建
    • 数据集实现代码
    • DataLoader使用
  • 糖尿病分类预测代码
  • torchvision.datasets
    • 练习
  • 练习

回顾

上节课使用全部数据进行训练。
在这里插入图片描述
在这里插入图片描述

Epoch, Batch-Size, Iterations

  • epoch:训练的总轮次,指所有的训练样本都进行一次训练。
  • batch-size:在一次训练中的训练样本数目。
  • iteration:1个epoch需要进行的训练次数。
  • epoch=batch-size*iteration
    在这里插入图片描述
  • shuffle:打乱数据
  • 先对数据进行乱序,然后进行分组为可迭代的loader,每一次迭代就是一个batch。
    在这里插入图片描述

糖尿病 Dataset 构建

  • 需要导入Dataset、DataLoader两个类,Dataset是个抽象类不能实例化,只能被继承。
  • 定义了一个数据集继承Dataset类,需要重写__init__、getitem、__len__三个魔法函数,分布是进行初始化,获取索引、获取列表长度的作用。
  • 加载数据集需要用到DataLoader,number workers是指加载数据集时是否使用多线程(1是单线程)
  • 另外,如果数据量比较小我们可以直接加载数据到内存;但是如果数据量比较大,比如说数据是图片,那么我们会新建一个txt文档保存数据集的路径、文件名、标签等信息。dataloader从txt文本中加载数据(YOLO系列)。
    在这里插入图片描述
    注意!!!由于windows系统和Linux系统的差异,直接使用num_workers相关设置会报错,RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.最好加一个if语句:if __name__ == '__main__':
    在这里插入图片描述

数据集实现代码

# prepare dataset
class DiabetesDataset(Dataset):
    def __init__(self, filepath):
        xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)#导入数据集
        self.len = xy.shape[0]  # shape(行,列)shape[0]:获取行数
        self.x_data = torch.from_numpy(xy[:, :-1])#获取前8列数据x
        self.y_data = torch.from_numpy(xy[:, [-1]])#获取最后一列数据y

    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]#返回索引

    def __len__(self):
        return self.len#返回数据长度


dataset = DiabetesDataset('diabetes.csv')#读取数据
#加载数据
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True, num_workers=4)  # num_workers 多线程

DataLoader使用

if __name__ == '__main__':
    for epoch in range(100):
        for i, data in enumerate(train_loader, 0):  # train_loader 是先shuffle后mini_batch
            inputs, labels = data
            #每次获取一个(x[i],y[i]),然后拼接成一个矩阵X,Y,DataLoader会自动把数据转化为Tensor
            y_pred = model(inputs)
            loss = criterion(y_pred, labels)
            print(epoch, i, loss.item())

            optimizer.zero_grad()
            loss.backward()

            optimizer.step()

糖尿病分类预测代码

同样是四步走:
在这里插入图片描述
请先尝试自己写!(其实就是第一步、第四步有所改动)

import torch
import numpy as np
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

# prepare dataset

class DiabetesDataset(Dataset):
    def __init__(self, filepath):
        xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)#导入数据集
        self.len = xy.shape[0]  # shape(行,列)shape[0]:获取行数
        self.x_data = torch.from_numpy(xy[:, :-1])#获取前8列数据x
        self.y_data = torch.from_numpy(xy[:, [-1]])#获取最后一列数据y

    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]#返回索引

    def __len__(self):
        return self.len#返回数据长度

dataset = DiabetesDataset('diabetes.csv')#读取数据
#加载数据
train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True, num_workers=4)  # num_workers 多线程

# design model using class
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()

# construct loss and optimizer
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# training cycle forward, backward, update
if __name__ == '__main__':
    for epoch in range(100):
        for i, data in enumerate(train_loader, 0):  # train_loader 是先shuffle后mini_batch
            inputs, labels = data
            #每次获取一个(x[i],y[i]),然后拼接成一个矩阵X,Y,DataLoader会自动把数据转化为Tensor
            y_pred = model(inputs)
            loss = criterion(y_pred, labels)
            print(epoch, i, loss.item())

            optimizer.zero_grad()
            loss.backward()

            optimizer.step()

torchvision.datasets

torchvision.datasets提供了许多数据集。
在这里插入图片描述

练习

请使用MNIST数据集构建一个线性模型分类器
MNIST数据集的使用

  • 加载数据集时,transform=transforms.ToTensor():将数据转化为Tensor。
  • download=True:路径没有数据集时会自动下载。
  • 训练时,DataLoader:shuffle=True:乱序;测试时不需要设置。
  • inputs,target:读取数据集中的X、Y。
    在这里插入图片描述

练习

kaggle是一个数据竞赛网站,提供了很多数据集和解决方案,可以在上面提交代码。

  • 泰坦尼克号数据集地址:https://www.kaggle.com/c/titanic/data
  • 请使用DataKLoader构建一个泰坦尼克号分类器。
  • 训练目标:乘客是否存活(Survived 为y,其余特征列可以有所选择作为x)
  • 做好了可以在网站上提交结果,查看评分。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/356142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高分文献解读|乳酸通过与可溶性腺苷酸环化酶结合调控铁代谢

乳酸(LA)的过量产生可能发生在运动期间或者许多疾病中,例如癌症中。个人伴有高乳酸血症的患者常表现为贫血、血清铁减少以及一种铁代谢关键调控因子—铁调素(hepcidin)升高。然而,目前尚不清楚乳酸是否以及如何调节铁调素的表达。…

C++从初级工程师到中级工程师【个人学习笔记】

目录 1 背景2 要点2.1 内存分区模型2.1.1 程序运行前2.1.2 代码 2.2.1 程序运行后栈区代码 1 背景 从这一章开始,开始学习C的面向对象编程,是C中的核心。 2 要点 2.1 内存分区模型 C程序在执行时,将内存大方向划分为4个区域 代码区&…

HiveSQL题——排序函数(row_number/rank/dense_rank)

一、窗口函数的知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路: LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowin…

怎样用流程自定义表单提升办公效率?

如果想要提升办公协作效率,可以试试低代码技术平台及流程自定义表单工具。不可否认的是,随着社会的进步和发展,传统的表单制作工具已经没有办法再满足业务量不断上涨的办公需求了,但是,借助专业的流程自定义表单工具就…

“值得一试的六个浏览器扩展推荐|让你的上网更加便捷和有趣!”

iTab新标签页(免费ChatGPT) iTab是新一代组件式标签页的首创者,简洁美观高效无广,是您打造个人学习工作台的浏览器必备插件。 详情请见: iTab新标签页(免费ChatGPT) - Microsoft Edge Addons AdGuard 广告拦截器 AdGuard 广告拦截器可有效的…

核对表:使用条件语句CHECKLIST:Using Conditionals

核对表&#xff1a;使用条件语句CHECKLIST&#xff1a;Using Conditionals if-then语句 代码的正常路径清晰吗&#xff1f; if-then 测试对等量分支的处理方式正确吗? 确保不要用“>”代替“>”或用“<”代替“<”。 使用了else子句并加以说明吗&#xff1f; els…

移动Web——平面转换-多重转换

1、平面转换-多重转换 多重转换技巧&#xff1a;先平移再旋转 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&qu…

【Python从入门到进阶】48、当当网Scrapy项目实战(一)

接上篇《47、Scrapy Shell的了解与应用》 上一篇我们学习了Scrapy终端命令行工具Scrapy Shell&#xff0c;并了解了它是如何帮助我们更好的调试爬虫程序的。本篇我们将正式开启一个Scrapy爬虫项目的实战&#xff0c;对当当网进行剖析和抓取。 一、当当网介绍 当当网成立于199…

【Javaweb程序设计】【C00163】基于SSM房屋中介服务平台(论文+PPT)

基于SSM房屋中介服务平台&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的房屋中介服务平台 本系统分为前台、管理员、用户3个功能模块。 前台&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首页界面。…

VS+QT 配置Eigen库

1、下载Eigen库&#xff0c;如下&#xff1a; 2、解压到项目目录下&#xff0c;如下&#xff1a; 3、 在C/C中包含文件&#xff0c;如下&#xff1a; 4、在头文件中加入如下代码&#xff1a; 5、测试代码&#xff1a; //.cpp文件 #include "testEigen.h"testEigen::…

盛最多水的容器[中等]

一、题目 给定一个长度为n的整数数组height。有n条垂线&#xff0c;第i条线的两个端点是(i, 0)和(i, height[i])。找出其中的两条线&#xff0c;使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。也就是求x轴与y轴的面积。 说明&#xff1a;你不能倾…

C# 获取计算机信息

目录 一、本机信息 1、本机名 2、获得本机MAC地址 3、获得计算机名 4、显示器分辨率 5、主显示器分辨率 6、系统路径 二、操作系统信息 1、操作系统类型 2、获得操作系统位数 3、获得操作系统版本 三、处理器信息 1 、处理器个数 四、CPU信息 1、CPU的个数 2、…

C语言推荐新手学习吗?

今日话题&#xff0c;C语言推荐新手学习吗&#xff1f;我自己当年是从BASIC入门编程的&#xff0c;回顾起来&#xff0c;BASIC的确是一门非常容易入门的语言。它让初学者能够专注于编写程序本身&#xff0c;而不必过多关注细节。Pascal也是一门较易入门的语言&#xff0c;比C语…

C语言-指针的基本知识(上)

一、关于内存 存储器&#xff1a;存储数据器件 外存 外存又叫外部存储器&#xff0c;长期存放数据&#xff0c;掉电不丢失数据 常见的外存设备&#xff1a;硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器&#xff0c;暂时存放数据&#xff0c;掉电数据…

eclipse启动Java服务及注意事项

一、eclipse导入java项目并配置 1、导入项目 选择file——》import…——》Generate——》Exiting Projects into Workspace——》选择要导入的项目 2、添加tomcat 1&#xff09;点击Serves——》No servers are available. Click this link to create a new server… 2&…

为什么要用云手机养tiktok账号

在拓展海外电商市场的过程中&#xff0c;许多用户选择采用tiktok短视频平台引流的策略&#xff0c;以提升在电商平台上的流量&#xff0c;吸引更多消费者。而要进行tiktok引流&#xff0c;养号是必不可少的一个环节。tiktok云手机成为实现国内跨境养号的一种有效方式&#xff0…

Jenkins如何从GIT下拉项目并启动Tomcat

一、先添加服务器 二、添加视图 点击控制台输出&#xff0c;滑到最下面&#xff0c;出现这个就说明构建成功了&#xff0c;如果没有出现&#xff0c;说明构建有问题&#xff0c;需要解决好问题才能启动哦~

SpringBoot 实现自定义指标监控

一、添加业务监控指标 在 spring-web-prometheus-demo 项目的基础上&#xff0c;我们添加一个 PrometheusCustomMonitor 类。在这里面我们定义了三个业务指标&#xff1a; order_request_count&#xff1a;下单总次数order_amount_sum&#xff1a;下单总金额 Component publ…

Python判断语句——if语句的基本格式

一、引言 在Python编程语言中&#xff0c;if语句是一种基本的控制流语句&#xff0c;用于根据特定条件执行不同的代码块。它的基本格式相对简单&#xff0c;使得Python代码清晰、易于阅读。下面&#xff0c;我们将深入探讨if语句的基本格式、用法和注意事项。 二、if语句的…

如何搭建Nextcloud云存储网盘并实现无公网ip访问本地文件【内网穿透】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…
最新文章