PyTorch学习笔记-常用函数与数据加载

news2025/7/10 20:00:15

1. PyTorch常用函数

(1)路径相关的函数
假设我们数据集的目录结构如下:

在这里插入图片描述

首先需要 import os,在 os 中常用的路径相关的函数有:

  • os.listdir(path):将 path 目录下的内容列成一个 list
  • os.path.join(path1, path2):拼接路径:path1\path2

例如:

import os

dir_path = 'dataset/hymenoptera_data/train/ants_image'
img_path_list = os.listdir(dir_path)
img_full_path = os.path.join(dir_path, img_path_list[0])
print(img_path_list)  # ['0013035.jpg', '1030023514_aad5c608f9.jpg', ...]
print(img_full_path)  # dataset/hymenoptera_data/train/ants_image\0013035.jpg

(2)辅助函数

  • dir():不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
  • help(func):查看函数 func 的使用说明。

例如:

import torch

print(dir(torch))  # ['AVG', 'AggregationType', ..., 'cuda', ...]
help(torch.cuda.is_available)  # Help on function is_available in module torch.cuda: is_available() -> bool...

2. 数据加载

PyTorch 数据集 (Dataset),数据读取和预处理是进行机器学习的首要操作,PyTorch 提供了很多方法来完成数据的读取和预处理。

(1)Dataset:torch.utils.data.Dataset 是代表这一数据的抽象类。你可以自己定义你的数据类,继承和重写这个抽象类,非常简单,只需要定义 __len____getitem__ 这个两个函数即可,例如:

from torch.utils.data import Dataset
from PIL import Image
import os

class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir + '_image')
        self.img_path_list = os.listdir(self.path)

    def __getitem__(self, idx):
        img_path = self.img_path_list[idx]
        img_full_path = os.path.join(self.root_dir, self.label_dir + '_image', img_path)
        img = Image.open(img_full_path)
        label = self.label_dir
        return img, label

    def __len__(self):
        return len(self.img_path_list)

root_dir = 'dataset/hymenoptera_data/train'
ants_label_dir = 'ants'

ants_data = MyData(root_dir, ants_label_dir)
img, label = ants_data[0]
print(img, label)
img.show()

通过上面的方式,可以定义我们需要的数据类,可以通过迭代的方式来获取每一个数据,但这样很难实现取 batch、shuffle 或者是多线程去读取数据。

(2)DataLoader:torch.utils.data.DataLoader() 构建可迭代的数据装载器,我们在训练的时候,每一个 for 循环,每一次 iteration,就是从 DataLoader 中获取一个 batch_size 大小的数据的。学习 DataLoader 之前需要先学一下 Transform:PyTorch学习笔记-Transform。

DataLoader 的参数很多,但我们常用的主要有以下几个:

  • dataset:Dataset 类,决定数据从哪读取以及如何读取。
  • bath_size:批大小。
  • num_works:是否多进程读取机制。
  • shuffle:每个 epoch 是否乱序。
  • drop_last:当样本数不能被 batch_size 整除时,是否舍弃最后一批数据。

要理解这个 drop_last,首先,得先理解 Epoch、Iteration 和 Batch_size 的概念:

  • Epoch:所有训练样本都已输入到模型中,称为一个 Epoch。
  • Iteration:一批样本输入到模型中,称为一个 Iteration。
  • Batch_size:一批样本的大小,决定一个 Epoch 有多少个 Iteration。

DataLoader 的作用就是构建一个数据装载器,根据我们提供的 batch_size 的大小,将数据样本分成一个个的 batch 去训练模型,而这个分的过程中需要把数据取到,这个就是借助 Dataset__getitem__ 方法。

例如:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cmake入门教程 跨平台项目构建工具cmake介绍

一.初识cmake 在介绍cmake之前,我们先来从工具一个个衍生出来,做过linux c/c编程的时候一般用过gcc指令或者makefile。我们先来介绍下 gcc(GNU Compiler Collection)将源文件编译(Compile)成可执行文件或…

若依框架解读(前后端分离版)—— 1.Spring Security相关配置(@Anonymous注解)

有关Spring Security与JWT相关知识可以看我之前写的文章:SpringBoot整合SpringSecurityJWT(三更草堂) 这边需要对RBAC模型有一点了解,比较简单可自行百度。 首先查看Security配置类SecurityConfig,如果我们想要放行自己写的接口是可以在此配置…

数学建模国赛/美赛常见赛题类型及建模方案(纯干货)

目录 一,评价类问题 1,建模步骤如下图所示: 2,主客观评价问题的区别 3,如何选择合适的评价方法 二,预测类赛题 1,预测类赛题的基本解题步骤 2,预测类问题的区别 3,…

什么是Tomcat?如何使用Tomcat?如何部署一个静态页面?

目录 1、Tomcat是什么? 2、下载安装 3、目录结构 4、启动服务器 5、部署静态页面(简单举例) 1、Tomcat是什么? Tomcat是一个HTTP服务器,Tomcat就是基于Java实现的一个开源免费的HTTP服务器 2、下载安装 下载网…

virtualbox安装openEuler-方案二

下载的讲解在另一篇:VirtualBox安装openEuler 方案一 安装: 1,配置网卡 2,加载光驱设置 选择对应的iso文件即可。 3,启动openEuler 选择第一个即可,第二个选项一般是在生成环境中使用。 经过一段…

std::weak_ptr(分析、仿写)

目录 一、为什么会有weak_ptr? 1、看一个例子 2.weak_ptr 是什么? 3.weak_ ptr 如何使用? 1、如何创建weak_ ptr 实例 2、如何判断weak_ptr指向的对象是否存在 3、weak_ptr的使用 二、仿写std::weak_ptr 1、c参考手册 2、代码 一、为什么会有weak_ptr? 1、看一个例子…

18uec++多人游戏【服务器为两个角色发枪,并能在线开枪】

打开主角类,生成枪的代码逻辑在游戏开始函数里 所以在生成之前,我们需要判断该对象是否在服务器端(服务器端视角) void ASCharacter::BeginPlay() {Super::BeginPlay();DefaultsFOV CameraComp->FieldOfView;//判断是否在服务…

支付系统 — 支付路由

本文主要介绍下支付中路由系统的主要流程。 支付路由的作用 降低成本:越便宜越好; 提高用户体验:用户支付的越爽越好;越快越好;成功率越高越好。 确保有可用通道:多个选择,确保能完成支付。 …

【JVM】PC程序计数器和PC寄存器

一、JVM体系结构 本文所讲内容主要是 JVM 体系结构图中 运行时数据区 中的 PC寄存器,如下图所示: 二、PC寄存器是什么? 这里引用别人的一句话: 首先这里的PC寄存器并非广义上所指的物理寄存器,或许将其翻译为PC计数…

antd Carousel 重写dot样式

antd的Carousel走马灯组件的dot也就是下面那个滑动的按钮非常的不起眼。 白色背景的时候完全看不到。 但是我们大部分时候又都是白色背景,于是来自己重写一下样式。 在控制台看了一下,应该是这个属性在控制dot的颜色,重写这个属性就可以了。…

Nginx源码解析 --红黑树

预读知识 红黑树是一种自平衡二叉树,不仅可以使用二分法快速查找,而且插入和删除操作的效率也很高,常用于构造关联数组(例如C标准库里的set和 map)。 在Nginx里红黑树主要用在事件机制里的定时器,检查连接超时&#…

Debian11之基于kubeadm安装K8S集群

官方安装教程 硬件要求 每台机器的内存要 2GB、CPU2 核心及以上 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以) 节点之中不可以有重复的主机名、MAC 地址或 product_uuid 开启机器上的某些端口 为了保证 kubelet 正常工作,必须…

FluentCRM 2.6.0:更多功能、集成改进等等!

FluentCRM 2.6.0最新版发布了,它是一个主要的更新版本,为您带来了更多的功能、改进的集成、升级和错误修复!让我们来看看 FluentCRM 2.6.0 提供了什么新功能! 目录 FluentCRM 2.6的更高级过滤条件 电子邮件活动条件 基于自动化…

STC32G 单片机EEPROM 操作实例

一 STC32G 单片机EEPROM简介 STC32G系列单片机内部集成了大量的EEPROM,特别是STC32G12K128集成多达128K EEPROM。 STC32G内部EEPROM可擦写10万次,分若干扇区,每个扇区512字节。EEPROM的写操作只能将1写为0。要将0写为1,必须擦除…

Hive之函数

Hive之函数 第九章 函数 9.1 系统内置函数 9.1.1 理论 查看内置函数: show functions; 显示函数的详细信息: desc function abs; 显示函数的扩展信息: desc function extended concat; 一、关系运算: 1. 等值比较: 2. 等值…

VSCode:使用CMakeLists.txt构建C++项目

vscode配置 插件: CMake插件主要功能是CMake语法高亮、自动补全CMake Tools的功能主要是结合VSCode IDE使用CMake这个工具,比如生成CMake项目、构建CMake项目等CMake Tools Helper CMake工具本身还是要下载到本地,并且配置环境变量。 项目…

足球二三事 - 世界杯征文

征文活动链接: https://bbs.csdn.net/topics/609601920 从报纸上时候看 1982 年的世界杯,当时我们家里没有电视,晚上的时候听到马路对面的房子里传来惊呼声,也不知道为啥。 1983 年的春节前,家里要打扫房间&#xff…

UE4,UE5虚幻引擎源码版下载

1、进入Epic的GitHub仓库 https://github.com/EpicGames/Signup GitHub - EpicGames/Signup: Information about signing up for a free Epic Games account, and getting access to UnrealEngine source code. 2、加入EpicTeamAdmin 3、进入UnrealEngine仓库 4、找到需要下…

Linux系统中curl命令用法详解

在Linux系统中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。 curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client&#xff09…

(C语言)printf打印的字符串太长了,我想分两行!

本文来自于公众号&#xff1a;C语言编程技术分享 一、提问 有下述C程序&#xff1a; #include <stdio.h> #include <stdlib.h>int main() { printf("123456789012345678901234567890\n");system("pause");return 0; } printf函数要打印的字…