使用PyTorch加载数据集:简单指南

关于pytorch模型猫狗图片识别 以及代码和数据集 基于Alex Net 模型猫狗图片识别 一步步带你敲卷积网络识别猫狗图片算法,步骤详细思路清晰。本文章利用Alex Net模型解决猫狗图片识别问题。 构建一个网络模型基本由这四个步骤逐步搭建: 构建网络模型 准备及处理数据集 定义损失函数和优化器 训练和测试 文章还会对训练好的模型进行测试使用,延伸利用图像的函数做训练过程数据的可视化,分享数据训练的情况。 1、构建网络模型 首先先构建Alex Net网络模型,我把网络模型写在一个独立的文件上,模块化,我后期可以替换模型来训练数据集。 Alex Net 阅读详情

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

🥦引言

在机器学习和深度学习中,数据集的加载和处理是一个至关重要的步骤。PyTorch是一种流行的深度学习框架,它提供了强大的工具来加载、转换和管理数据集。在本篇博客中,我们将探讨如何使用PyTorch加载数据集,以便于后续的模型训练和评估。

🥦前期的准备

在实战前,我们需要了解三个名词,Epoch、Batch-Size、Iteration
下面针对上面,我展开进行说明

  • Epoch(周期):
    定义:Epoch是指整个训练数据集被完整地前向传播和反向传播通过神经网络的一次循环。在一个Epoch内,模型将看到训练集中的每个样本一次,无论是一次完整的前向传播和反向传播,还是批量的。
    作用:一个Epoch代表了一次完整的训练周期。在每个Epoch结束后,模型参数都会被更新一次。Epoch的数量通常是一个超参数,可以控制模型的训练时间和效果。

  • Batch Size(批大小):
    定义:Batch Size是指每次迭代时用于训练模型的样本数量。在每个迭代中,模型将根据批大小从训练数据中选择一小批样本来执行前向传播和反向传播,然后更新模型参数。
    作用:Batch Size控制了每次参数更新的规模。较大的批大小可以加速训练,但可能需要更多内存。较小的批大小可以增加模型的泛化能力,但训练时间可能更长。

  • Iterations(迭代):
    定义:Iteration是指一次完整的前向传播、反向传播和参数更新。一个Iteration中,模型会处理一个Batch Size的样本。
    联系:Iterations通常用于描述在一个Epoch内,模型参数更新的次数。一个Epoch内的Iterations数量等于训练数据集的大小除以Batch Size。例如,如果你有1000个训练样本,批大小为100,那么一个Epoch包含10个Iterations(1000 / 100 = 10)。

总结一下: 一个Epoch包含多个Iterations,每个Iteration包含一个Batch Size的样本。
Batch Size决定了每次参数更新的规模,而Epoch表示整个数据集的一个完整训练周期。
训练时通常迭代多个Epochs,其中每个Epoch由多个Iterations组成,以逐渐优化模型的参数。
超参数的选择,如Epoch数量和Batch Size,会影响训练的速度和模型的性能,需要根据具体问题进行调整和优化。


在DataLoader中有一个参数是shuffle,这个参数是一个bool值的参数,如果设置为TRUE的话,表示打乱数据集在这里插入图片描述

🥦基本的步骤说明

  1. 导入必要的库
  2. 定义数据预处理转换
  3. 下载和准备数据集
  4. 创建数据加载器
  5. 数据迭代

这里介绍一下DataLoader的参数

  • dataset:这是你要加载的数据集的实例,通常是继承自torch.utils.data.Dataset的自定义数据集类或内置数据集类(如MNIST)。

  • batch_size:指定每个批次(batch)中包含的样本数。这是一个重要参数,影响了训练和推理过程中的计算效率和模型的性能。通常,你需要根据你的硬件资源和数据集大小来选择适当的批大小。

  • shuffle:布尔值,控制是否在每个Epoch开始时打乱数据集的顺序。通常,设置为True可以帮助模型更好地学习,因为它增加了数据的随机性,避免模型对数据的顺序产生过度依赖。在训练时,通常建议将其设置为True。

  • num_workers:指定用于数据加载的子进程数量。这允许在数据加载过程中并行加载数据,以提高数据加载的效率。通常,设置为大于0的值可以加速数据加载。但要注意,过高的值可能会占用过多系统资源,因此需要权衡。

  • pin_memory:如果为True,则数据加载器会将批次数据置于GPU的锁页内存中,以提高数据传输的效率。通常,在GPU上训练时,建议将其设置为True。

  • drop_last:如果为True,当数据集的大小不能被批大小整除时,将丢弃最后一个批次。通常,将其设置为True以确保每个批次都具有相同大小,这在某些情况下有助于训练的稳定性。

  • timeout:指定数据加载超时的时间(单位秒)。如果数据加载器无法在指定时间内加载数据,它将引发超时异常。这可用于避免数据加载过程中的死锁。

🥦代码讲解+实现

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)
for epoch in range(100):
    for i, data in enumerate(train_loader, 0):
        # 1. Prepare data
        inputs, labels = data
        # 2. Forward
        y_pred = model(inputs)
        loss = criterion(y_pred, labels) 
        print(epoch, i, loss.item())
        # 3. Backward
        optimizer.zero_grad()
        loss.backward()
        # 4. Update
        optimizer.step()
  • 首先,导入所需的库,包括NumPy和PyTorch。这些库用于处理数据和创建深度学习模型。

  • 创建一个自定义的数据集类DiabetesDataset,用于加载和处理数据。该类继承自torch.utils.data.Dataset类,并包含以下方法:
    init:加载数据文件(假定是CSV格式),将数据分为特征(x_data)和标签(y_data),并存储数据集的长度(len)。
    getitem:用于获取数据集中特定索引位置的样本。
    len:返回数据集的总长度。

  • 创建数据集实例dataset,并使用DataLoader创建数据加载器train_loader。数据加载器用于批量加载数据,batch_size参数设置每个批次的样本数,shuffle参数表示是否随机打乱数据集顺序,num_workers参数表示并行加载数据的进程数。

  • 定义神经网络模型Model,该模型继承自torch.nn.Module。模型包含三个线性层和Sigmoid激活函数。在__init__方法中,定义了模型的层结构,而forward方法描述了数据在模型中的传递过程。

  • 创建模型实例model。

  • 定义损失函数criterion和优化器optimizer。在这里,使用了二元交叉熵损失函数(torch.nn.BCELoss)和随机梯度下降优化器(torch.optim.SGD)。

  • 进行训练循环,循环次数为100次(由for epoch in range(100)控制)。
    在内部循环中,使用enumerate(train_loader, 0)来迭代数据加载器。
    准备数据:获取输入数据和标签。
    前向传播:将输入数据传递给模型,获得预测值。
    计算损失:使用损失函数计算预测值与实际标签之间的损失。
    打印损失值:输出当前训练批次的损失值。
    反向传播:通过优化器的backward()方法计算梯度。
    参数更新:使用优化器的step()方法来更新模型参数。

这段代码演示了一个基本的二分类问题的训练过程,其中神经网络模型用于预测糖尿病患者的标签(0表示非糖尿病,1表示糖尿病)。模型的训练是通过反向传播算法来更新模型参数以减小损失。在训练循环中,你可以观察损失值的变化,以了解模型的训练进展。

在这里插入图片描述

挑战与创造都是很痛苦的,但是很充实。

如何在PyTorch中进行数据加载和预处理? 结论: 在PyTorch中,数据加载和预处理是进行深度学习任务的重要步骤。通过合理地使用Dataset类、DataLoader类、torchvision.transforms模块以及自定义函数,可以方便地加载和预处理数据,为模型的训练和评估提供高效而灵活的数据准备过程。希望本文对您在PyTorch中进行数据加载和预处理有所帮助,并能为您的深度学习项目提供支持。本文将介绍在PyTorch中进行数据加载和预处理的常用方法,帮助您更好地处理和准备数据,以便用于模型训练和评估。 阅读详情

相关推荐

pytorch基础-数据集导入

pytorch的数据导入,包括dataset,tensorboard,transform,dataloder等

gudao07的博客 4040

Pytorch自带数据集介绍

ddd

godblesstao的博客 1万+

Pytorch学习(三)定义自己的数据集及加载训练

对于如何定义自己的Datasets我讲从以下几个方面进行解说 1.什么是Datasets? 2.为什么要定义Datasets? 3.如何定义Datasets? 什么是Datasets? 为什么要定义Datasets? Pytorch中有工具函数torch.utils.Data.DataLoader,通过这个函数我们在准备加载数据集使用mini-batch的时候可以使用多线程并行处理,这样可以加快我...

sinat_42239797的博客 12万+

PyTorch深度学习——加载数据集

pytorch深度学习关于加载数据集的代码解析

weixin_42603976的博客 3979

Pytorch加载图片数据集的两种方式

在Pytorch中加载图片数据集一般有两种方法。 第一种是使用 torchvision中的datasets.ImageFolder来读取图片然后用 DataLoader来并行加载,适合图片分类问题,简单但不灵活; 第二种是通过继承 torch.utils.data.Dataset 实现用户自定义读取数据集然后用 DataLoader来并行加载,较为灵活。下面分别介绍一下。

weixin_43917574的博客 1万+

PyTorch使用datasets.ImageFolder加载ImageNet数据集及数据集相关处理

PyTorch使用datasets.ImageFolder加载ImageNet数据集及数据集相关处理1. 前言2. ImageNet数据集处理2.1 数据下载 (ILSVRC-2012) 1. 前言 Large Scale Visual Recognition Challenge (ILSVRC),大尺度视觉识别挑战是用于评估用于大尺度目标检测与目标分类的算法的一个大型图像竞赛。其数据集就是我们常说的ImageNet数据集,包括1000个类别共1281167张带注释(标签)的训练集图片,50000张验证集图

风筝大晒的博客 2万+

PyTorch入门与实践指南

PyTorch是一款由Facebook AI研究院开发的开源深度学习框架,以其动态计算图、自动微分和灵活的张量操作而广受欢迎。本文从基础概念入手,详细介绍了PyTorch的核心组件,包括Tensor、自动微分(Autograd)、神经网络模块(nn.Module)和优化器(Optimizers)。通过实际案例,展示了如何使用PyTorch训练一个简单的卷积神经网络(CNN)来分类MNIST数据集中的手写数字,涵盖了数据准备、模型定义、训练、测试以及模型保存与加载的全过程

qq_56447863的博客 749

PyTorch如何加载数据集(自定义数据集)

pytorch加载数据集主要分为两种方法: 1、所使用数据集已被集成在pytorch内,如:CIFAR-10,CIFAR-100,MNIST等等。对于这种数据集,可以直接使用pytorch内置函数:torchvision.datasets.CIFAR100来直接加载,比较方便。例程如下: transform_train = transforms.Compose([ #transforms....

a1819797401的博客 1万+

Pytorch加载数据集的方式总结

目前我们有自己制作的数据以及数据标签,但是有时候感觉不太适合直接用Pytorch自带加载数据集的方法。我们可以自己来重写定义一个类,这个类继承于,同时我们需要重写这个类里面的两个方法_getitem__()和__len()__函数。如下所示。这两种方法如何构造以及具体的细节可以查看其他的博客。len方法必须返回数据的长度,getitem方法必须返回数据以及标签。通过上述的程序,我们构造了一个数据加载器torch_data,但是还是不能直接传入网络中。接下来需要构造数据装载器,产生可迭代的数据。.......

琥珀川 1万+

pytorch 构建自己的数据集,用来训练

文章目录第一种方法:使用Pytorch的Dataset类来构建数据集,再使用Data.DataLoader()来加载数据集1. 通过继承Dataset类来构建数据集2. 先实例化,再使用Data.DataLoader()来加载数据集第二种方法:先使用Data.TensorDataset(X_train, y_train)构造数据集,再使用Data.DataLoader()来加载数据集1. 读取所有...

轮子去哪儿了 1万+

Pytorch学习笔记一:制作、加载自己的图像数据集

Pytorch学习笔记一:制作、加载自己的图像数据集 文章目录Pytorch学习笔记一:制作、加载自己的图像数据集前言一、下载数据集二、加载自己的数据集1.制作数据集2.加载数据集Dataset类定义数据集Dataloader类实例化数据集总结 前言 首先介绍如何用pytorch加载网络现有数据集,然后介绍如何制作自己的图像数据集并批量读取来训练自己的网络。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载数据集 使用Pytorch进行读取本地的MINIST数据集并进行装载 # 训练数据和

qq_43173239的博客 4495

pytorch加载自己的图片数据集的两种方法

pytorch加载图片数据集有两种方法。 1.ImageFolder 适合于分类数据集,并且每一个类别的图片在同一个文件夹, ImageFolder加载的数据集, 训练数据为文件件下的图片, 训练标签是对应的文件夹, 每个文件夹为一个类别 在Flower_Orig_dataset文件夹下有flower_orig 和 sunflower这两个文件夹, 这两个文件夹下放着同一个类别的图片。 使用 ImageFolder 加载的图片, 就会返回图片信息和对应的label信息, 但是label信息是根据文件

DL猿 2万+

pytorch如何加载本地的数据集(例如MNIST/CIFAR10)

问题说明 由于pytorch首次加载MNIST或CIFAR10数据集时需要去外网下载,下载速度惊人。那么我们可以自己先把数据集下载下来,然后按照以下步骤直接加载本地数据集就行。 加载步骤 首先自己去下载MNIST或CIFAR数据集,存放到本地的某个文件夹中,如下图所示: 将数据集所在的文件夹路径复制下来,粘贴到浏览器中,按回车键打开。 - 在浏览器中打开该路径之后显示如下图: 然后将cifar.py或mnist.py中的url改成数据集所在的路径: 当前我的数据集所在的路径是: E:\Pychar

Sword的博客 1万+

pytorch加载自己的数据集

pytorch加载自己的数据集:分为几个步骤数据准备以及加载数据库–>数据加载器的调用或者设计–>批量调用进行训练或者其他作用。

weixin_42295969的博客 4055

基于C#的跨平台上位机开发:一次编写,多平台运行

摘要: 本文探讨了如何利用C#进行跨平台上位机开发,以适配Windows、Linux、macOS等多平台需求。通过分析传统单平台开发的局限性(如API差异、硬件接口兼容性),提出基于.NET 5/6/7的解决方案,重点推荐Avalonia(类WPF的跨平台UI框架)和GtkSharp(基于GTK+)实现图形界面。同时,针对硬件通信需求,介绍了System.IO.Ports串口通信和LibUsbDotNet的跨平台支持,并强调多平台调试(VS Code、Docker)的重要性,最终实现一次编码、多端部署的高效

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1409

自动驾驶仿真:python和carsim联合仿真案例

carsim内部有许多相关联合仿真的demo,simulink、labview等等都有涉及,这里简单介绍下python和carsim联合仿真的方法,虽然carsim官方有个Steer_Control.py相关的案例,但是感觉比较冗余,这里抽出重点部分和大家交流探讨下。提示:以下是本篇文章正文内容,下面案例可供参考1、这里关于solvers的细节其实都没说,因为里面确实也没什么内容好讲的,本质就是调用carsim.dll,如果你需要更多的函数解析其实可以看vs_api.h,路径在,具体内容如下图所示。

zataji的博客 9062

pytorch构建并加载自己的图像数据集

前言: pytorch虽然提供了torchvision.datasets包,封装了一些常用的数据集供我们很方便地调用,但我们经常需要训练自己的图像数据,构建并加载数据集往往是训练神经网络的第一步,本文将介绍如何构建加载自己的图像数据集,并用于神经网络输入。 一. 自定义图像数据集: 1. 数据集的文件结构: train为数据集根目录,下一级为每个类别的文件夹,分别包含着若干张图像: 2. torch.utils.data.Dataset: Dataset是表示数据集的抽象类,当我们自定义数据

PanYHHH的博客 9364

Linux系统centos7安装网卡驱动

有时候我们装完Centos或Ubuntu系统会发现没有网卡信息,说明网卡驱动不配置,所以我们要重新安装。 首先去服务器主板官网下载网卡驱动,注意32位和64位。 先查看网卡型号 lspci | grep -i ethernet 我的网卡型号是 00:1f.6 Ethernet controller: Intel Corporation Device 0d55。 网上一找,压根没找到这型号的网卡,别说驱动了。怀着试一试的心态,就安装i219-v系的网卡驱动,还别说,成功了。 针对i21...

wshc18的博客 2万+

pytorch加载自己的图像数据集

深度学习笔记(1)——加载自己的图像数据集 之前学习深度学习算法,都是使用网上现成的数据集,而且都有相应的代码。到了自己开始写论文做实验,用到自己的图像数据集的时候,才发现无从下手 ,相信很多新手都会遇到这样的问题。参考博文https://blog.youkuaiyun.com/TH_NUM/article/details/80877196,在此感谢博主! 下面代码实现了从文件夹内读取所有图片,进行归一化和标...

hnu_zzt的博客 2万+

硅光芯片边耦合器综述(一)

摘要:硅光子学在过去几十年间吸引了越来越多的关注,由于其具有诸多优点,如极低的成本、硅的高折射率带来的高集成密度,以及与现有半导体制造工艺的兼容性,被认为是未来日常应用中的一项充满前景的关键技术。在硅光子集成电路中,光互连是一个重要的问题,而在数据中心和光传输系统等应用场景中,光纤到芯片的光互连至关重要。光纤到芯片的光学耦合主要分为两大类:面外耦合(off-plane coupling)和面内耦合(in-plane coupling)。光栅耦合器属于前者,而边耦合器则属于面内耦合。本文主要关注硅光子集成电路

jhbfsoagoodgio的博客 5041

不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程)

本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。

weixin_29061041的博客 340

pytorch 加载自己的数据集

pytorch 加载自己的数据集 pytorch 加载自己的数据集,需要写一个继承自torch.utils.data中Dataset类,并修改其中的__init__方法、__getitem__方法、__len__方法。默认加载的都是图片,__init__的目的是得到一个包含数据和标签的list,每个元素能找到图片位置和其对应标签。然后用__getitem__方法得到每个元素的图像像素矩阵和标签,返...

shunshune的博客 1万+

Springer期刊LaTeX模板中参考文献格式选择与编译错误的快速修复指南

本文针对Springer期刊LaTeX模板中参考文献编译后显示问号的常见问题,提供了快速修复指南。核心在于正确选择并配置与期刊匹配的参考文献格式文件(.bst),并执行标准的四步编译流程。文章详细解释了问题根源,并给出了从查找正确.bst文件到修改代码、执行编译的完整解决方案,帮助作者高效解决投稿中的技术障碍。

weixin_29266007的博客 402

如何用Pytorch读取自己的数据集

在训练经典的数据集如cifar10,minsit等,可以用官方自带的数据集格式几行就写出来,如果是自己下载的数据集,那么我们应该如何用pytorch来读取呢?其实是有模板可以直接仿照着写的。 本次案例采用的是pokeman数据集,并用该数据集进行分类。该数据如下所示: 其中文件夹的名字便是标签。数据集大小划分为:皮卡丘 234、超梦239、杰尼龟223、小火龙 238、妙蛙种子234张图。 在...

yolov4的博客 1万+

深入解析MTK DRM初始化流程:从KMS模块到组件框架

本文深入解析了联发科(MTK)平台上DRM显示框架的初始化流程。从内核模块加载、Component框架管理依赖,到核心的mtk_drm_bind函数构建KMS对象(CRTC、Plane、Encoder、Connector),最终完成DRM设备注册并创建用户空间接口。文章结合调试经验,为开发者梳理了从驱动启动到屏幕点亮的完整路径与关键排查点。

onion的博客 767

【Matlab】matlab代码实现sph溃坝模拟

本文介绍了一个基于MATLAB的SPH溃坝模拟实现。代码使用平滑粒子流体动力学方法,通过建立1000个随机分布的粒子,计算粒子间的相互作用力来模拟流体运动。模拟过程包括初始化参数、粒子创建、密度压力更新、速度位置计算以及可视化展示。核心算法采用poly6Kernel和spikyKernelGradient函数处理粒子间作用力。该示例为二维简化模型,仅包含基本物理参数和计算流程,实际应用需进一步优化扩展。

unber的博客 207
上一篇: Essential Steps in Natural Language Processing (NLP)
下一篇: 使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
小馒头学python
小馒头学python 优质创作者: python技术领域 优质创作者: python技术领域
博客等级 码龄4年 1万+粉丝 252原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馒头学python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值