当前位置: 首页 > news >正文

第一章---Pytorch快速入门---第三节---pytorch中的数据操作和预处理

目录

1.高维数组

1.1 回归数据准备

1.2 分类数据准备

2. 图像数据

1.torchvision.datasets模块导入数据并预处理

2.从文件夹中导入数据并进行预处理


pytorch中torch.utils.data模块包含着一些常用的数据预处理的操作,主要用于数据的读取、切分、准备等。

常用数据操作类功能
torch.utils.data.TensorDataset()将数据处理为张量
torch.utils.data.ConcatDataset()连接多个数据集
torch.utils.data.Subset()根据索引获取数据集的子集
torch.utils.data.DataLoader()数据加载器
torch.utils.data.random_split()随机将数据集拆分为给定长度的非重叠数据集

使用这些类能够对高维数组、图像等各种类型的数据进行预处理,以便深度学习模型的使用,针对文本数据的处理可以使用torchtext库进行相关的数据准备操作。

1.高维数组

在很多情况下,我们需要从文本(如CSV文件)中读取高维数组数据,这类数据的特征是每个样本都有很多个预测变量(特征)和一个被预测变量(目标标签),特征通常是数值变量或者离散变量,被预测变量如果是连续的数值,则对应着回归问题,如果是离散变量,则对应分类问题。

1.1 回归数据准备

import torch
import numpy as np
import torch.utils.data as Data
from sklearn.datasets import load_boston,load_iris
#读取波士顿回归数据
boston_x,boston_y=load_boston(return_X_y=True)
print(boston_x.dtype)
print(boston_y.dtype)
"""
上面程序输出的数据集的特征和被预测变量都是numpy的64位浮点型数据。
而使用Pytorch时需要的数据是torch的32位浮点数的张量
需要将boston_x,boston_y转换为32位浮点型张量
"""
#将训练集转换为张量
train_x=torch.from_numpy(boston_x.astype(np.float32))
train_y=torch.from_numpy(boston_y.astype(np.float32))
"""
上面一段程序先将numpy数据转化为32位浮点型
然后使用torch.from_numpy()函数转化为张量
在训练全连接神经网络的时候,通常一次使用一个
batch的数据进行权重更新,torch.utils.data.DataLoader()
函数可以将输入的数据集(包含数据特征张量和被预测变量张量)
获得一个加载器,每次迭代可使用一个batch的数据
"""
#将训练集转化为张量之后,使用TensorDataset将train_x,train_y整合
train_data=Data.TensorDataset(train_x,train_y)
#定义一个数据加载器,将训练数据集进行批量处理
train_load=Data.DataLoader(dataset=train_data,#使用的数据集batch_size=64,#批处理的样本大小shuffle=True,#每次迭代前打乱数据num_workers=0#使用一个线程
)
print("======================")
#检查训练数据集的一个batch的样本的维度是否正确
for step,(b_x,b_y) in enumerate(train_load):if step>0:break
print("b_x.shape",b_x.shape)
print("b_y.shape",b_y.shape)
print("b_x.dtype",b_x.dtype)
print("b_y.dtype",b_y.dtype)

1.2 分类数据准备

分类数据与回归数据的不同之处在于,分类数据的被预测变量是离散型变量,所以在pytorch中默认的预测标签是64位有符号整型

import torch
import numpy as np
import torch.utils.data as Data
from sklearn.datasets import load_iris
iris_x,iris_y=load_iris(return_X_y=True)
print(iris_x.dtype)
print(iris_y.dtype)
"""
从上面程序输出可知,该数据集的特征数据(x)为64位浮点型,
标签y为32位整型。在pytorch构建网络中,x默认的数据格式是
torch.float32,所以转化为张量时,数据的特征要转化为32位浮点型
数据的类别标签y要转化为64位有符号整型,下面将x,y都转化为张量
"""
train_x=torch.from_numpy(iris_x.astype(np.float32))
train_y=torch.from_numpy(iris_y.astype(np.int64))
# print(train_x.dtype)
# print(train_y.dtype)
#将训练集转化为张量之后,使用TensorDataset将x,y整理到一块
train_data=Data.TensorDataset(train_x,train_y)
train_loader=Data.DataLoader(dataset=train_data,batch_size=10,#批处理样本大小shuffle=True,#每次迭代前打乱num_workers=0#使用两个线程
)
#检查一个训练集的batch样本维度是否正确
for step,(b_x,b_y) in enumerate(train_loader):if step>0:break
print("b_x.shape",b_x.shape)
print("b_y.shape",b_y.shape)
print("b_x.dtype",b_x.dtype)
print("b_y.dtype",b_y.dtype)

2. 图像数据

torchvision中的datasets模块包含多种常用的分类数据集下载及导入函数

数据集对应的类描述
datasets.MNIST()手写字体数据集
datasets.FashionMNIST()衣服、鞋子、包等10类数据集
dataets.KMNIST()一些文字的灰度数据
datasets.CocoCaptions()用于图像标注的MS coco数据
datasets.CocoDetection()用于检测的MS COCO数据
datasets.LSUN()10个场景和20个目标分类数据集
datasets.CIFAR10()CIFAR10类数据集
datasets.CIFAR100()CIFAR100类数据集
datasets.STL10()包含10类的分类数据集和大量的未标注数据
datasets.ImageFolder()定义一个数据加载器从文件夹中读取数据

torchvision中的transforms模块可以针对每张图像进行预处理操作。

数据集对应的类描述
transforms.Compose()将多个transform组合起来使用
transforms.Scale()按照指定图像尺寸对图像进行调整
transforms.CenterCrop()将图像进行中心切割,得到给定的大小
transforms.RandomCrop()切割中心点的位置随机选取
transforms.RandomHorizontalFlip()图像随机水平翻转
transforms.RandomSizedCrop()将给定的图像随机切割,然后再变换为给定的大小
transforms.Pad()将图像所有边用给定的pad value 填充
transforms.ToTensor()把一个取值范围是[0-255]的PIL图像或形状为[H,W,C]的数组,转换成形状为[C,H,W],取值范围是[0,1.0]的张量
transforms.Normalize()将给定的图像进行规范化操作
transforms.Lambda(lam)使用lam作为转化器,可自定义图像操作方式

1.torchvision.datasets模块导入数据并预处理

FashionMNIST数据集包含一个60000张28*28的灰度图片作为训练集,以及10000张28*28的灰度图片作测试集。数据共10类,分别是鞋子、连衣裙等服饰类的图像。


import torch
import torch.utils.data as Data
from torchvision.datasets import FashionMNIST
import torchvision.transforms  as transforms
from torchvision.datasets import ImageFoldertrain_data=FashionMNIST(root="./data/FashionMNIST",#数据的路径train=True,#只使用训练数据集transform=transforms.ToTensor(),download=False#数据集已经离线下载,无需再次下载
)
train_loader=Data.DataLoader(dataset=train_data,batch_size=64,shuffle=True,num_workers=2
)
"""
上面的程序主要完成了以下功能:
(1)通过FashionMNIST()函数来导入数据。在该函数中root参数用于指定需要导
入数据的所在路径(如果指定路径下已经有该数据集,需要指定对应的参数download= False,
如果指定路径下没有该数据集,需要指定对应的参数download=True,将会自动下载数据)。
参数train的取值为Ture或者False,表示导入的数据是训练集(60000张图片)或测试集(10000张图片)。
参数transform用于指定数据集的变换,transform = transforms.ToTensor()表示将数据中的
像素值转换到0 ~1之间,并且将图像数据从形状[H,W ,C]转换成形状为[C,H,W]
(2)在数据导入后需要利用数据加载器DataLoader()将整个数据集切分为多个batch,
用于网络优化时利用梯度下降算法进行求解。在函数中dataset参数用于指定使用的数据集; 
batch__size参数指定每个batch使用的样本数量;shuffle = True表示从数据集中获取每个
批量图片时需先打乱数据;num_workers参数用于指定导人数据使用的进程数量(和并行处理相似)。
经过处理后该训练数据集包含938个batch
"""
#对训练集进行处理后,可以使用相同的方法对测试集进行处理
test_data=FashionMNIST(root="./data/FashionMNIST",train=False,download=False
)
#为数据添加一个通道维度,并且取值范围缩放到0-1之间
test_data_x=test_data.data.type(torch.FloatTensor) /255.0
test_data_x=torch.unsqueeze(test_data_x,dim=1)
test_data_y=test_data.targets
"""
上面的程序使用FashionMNIST()函数导入数据
使用train = False参数指定导入测试集
并将数据集中的像素值除以255.0,使像素值转化到0 ~1之间
再使用函数torch.unsqueeze()为数据添加一个通道即可得到测试数据集。
在test_data中使用test_data.data获取图像数据,
使用test_data.targets获取每个图像所对应的标签。"""

2.从文件夹中导入数据并进行预处理

在torchvision的datasets模块中包含有ImageFolder()函数,它可以读取:在相同的文件路径下,每类数据都单独存放在不同的文件夹下。

#对训练集进行预处理
train_data_transforms=transforms.Compose(transforms.RandomResizedCrop(224),#随机长宽比裁剪224*224transforms.RandomHorizontalFlip(),#依据概率p=0.5水平翻转transforms.ToTensor(),#转化为将张量并归一化至[0-1]transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
)
#读取图像
train_data_dir="data/imageData"
train_data=ImageFolder(train_data_dir,transform=train_data_transforms)
train_data_loader=Data.DataLoader(train_data,batch_size=4,shuffle=True,num_workers=2
)

相关文章:

第一章---Pytorch快速入门---第三节---pytorch中的数据操作和预处理

目录 1.高维数组 1.1 回归数据准备 1.2 分类数据准备 2. 图像数据 1.torchvision.datasets模块导入数据并预处理 2.从文件夹中导入数据并进行预处理 pytorch中torch.utils.data模块包含着一些常用的数据预处理的操作,主要用于数据的读取、切分、准备等。 常用…...

【代码随想录训练营】【Day38】第九章|动态规划|理论基础|509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

理论基础 动态规划与贪心的区别并不是学习动态规划所必须了解的,所以并不重要。 想要了解动态规划算法题的特点,可以直接做下面三道入门简单题练练手感,找找感觉,很快就能体会到动态规划的解题思想。 总结成一句话就是&#xf…...

华为OD机试题 - 快递货车(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:快递货车题目输入输出示例一输入输出Code解题思路版权说明华为O…...

前端——7.图像标签和路径

这篇文章,我们来讲解一下图像标签 目录 1.图像标签 1.1介绍 1.2实际展示 1.3图像标签的属性 1.3.1 alt属性 1.3.2 title属性 1.3.3 width / height 属性 1.3.4 border属性 1.4注意事项 2.文件夹 2.1目录文件夹和根目录 2.2 VSCode打开目录文件夹 3.路…...

java -- stream流

写在前面: stream流一直在使用,但是感觉还不够精通,现在深入研究一下。 stream这个章节中,会用到 函数式接口–lambda表达式–方法引用的相关知识 介绍 是jdk8引进的新特性。 stream流是类似一条流水线一样的操作,每次对数据进…...

【Spring6】| Bean的四种获取方式(实例化)

目录 一:Bean的实例化方式 1. 通过构造方法实例化 2. 通过简单工厂模式实例化 3. 通过factory-bean实例化 4. 通过FactoryBean接口实例化 5. BeanFactory和FactoryBean的区别(面试题) 6. 使用FactoryBean注入自定义Date 一&#xff1a…...

01: 新手学SpringCloud前需知道的5点

目录 第一点: 什么是微服务架构 第二点:为什么需要学习Spring Cloud 第三点: Spring Cloud 是什么 第四点: SpringCloud的优缺点 1、SpringCloud优点 2、SpringCloud缺点 第五点: SpringCloud由什么组成 1&…...

ubuntu apt安装arm交叉编译工具

查找查找编译目标为32位的gcc-arm交叉编译器命令apt-cache search arm|awk index($1,"arm")!0 {print}|grep gcc-arm\|g-arm #或者 apt-cache search arm|awk index($1,"arm")!0 {print}|grep -E gcc-arm|g\\-arm输出如下g-arm-linux-gnueabihf - GNU C co…...

阿里云一面经历

文章目录 ES 查询方式都有哪些?1 基于词项的查询term & terms 查询Fuzzy QueryWildcard Query2 基于全文的查询Match QueryQuery String QueryMatch Phrase Query3 复合查询Bool QueryElasticsearch 删除原理ES 大文章怎么存arthas 常用命令arthas 排查问题过程arthas 工作…...

Java Stream中 用List集合统计 求和 最大值 最小值 平均值

对集合数据的统计,是开发中常用的功能,掌握好Java Stream提供的方法,避免自己写代码统计,可以提高工作效率。 先造点数据: pigs.add(new Pig(1, "猪爸爸", 31, "M", false)); pigs.add(new Pig(…...

【Linux】多线程---线程控制

进程在前面已经讲过了,所以这次我们来讨论一下多线程。前言:线程的背景进程是Linux中资源及事物管理的基本单位,是系统进行资源分配和调度的一个独立单位。但是实现进程间通信需要借助操作系统中专门的通信机制,但是只这些机制将占…...

秒杀高并发解决方案

秒杀高并发解决方案 1.秒杀/高并发方案-介绍 秒杀/高并发 其实主要解决两个问题,一个是并发读,一个是并发写并发读的核心优化理念是尽量减少用户到 DB 来"读"数据,或者让他们读更少的数据, 并 发写的处理原则也一样针对秒杀系统需…...

【每日一题】蓝桥杯加练 | Day07

文章目录一、三角回文数1、问题描述2、解题思路3、AC代码一、三角回文数 原题链接:三角回文数 1、问题描述 对于正整数 n, 如果存在正整数 k 使得n123⋯k k(k1)2\frac{k(k1)}{2}2k(k1)​ , 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯363 。 如果一…...

条件语句(分支语句)——“Python”

各位CSDN的uu们你们好呀,最近总是感觉特别特别忙,但是却又不知道到底干了些什么,好像啥也没有做,还忙得莫名其妙,言归正传,今天,小雅兰的内容还是Python呀,介绍一些顺序结构的知识点…...

论文投稿指南——中文核心期刊推荐(国家财政)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...

面向数据安全共享的联邦学习研究综述

开放隐私计算 摘 要:跨部门、跨地域、跨系统间的数据共享是充分发挥分布式数据价值的有效途径,但是现阶段日益严峻的数据安全威胁和严格的法律法规对数据共享造成了诸多挑战。联邦学习可以联合多个用户在不传输本地数据的情况下协同训练机器学习模型&am…...

Redis经典五种数据类型底层实现原理解析

目录总纲redis的k,v键值对新的三大类型五种经典数据类型redisObject结构图示结构讲解数据类型与数据结构关系图示string数据类型三大编码格式SDS详解代码结构为什么要重新设计源码解析三大编码格式hash数据类型ziplist和hashtable编码格式ziplist详解结构剖析ziplist的优势(为什…...

Jackson 返回前端的 Response结果字段大小问题

目录 1、问题产生的背景 2、出现的现象 3、解决方案 4、成果展现 5、总结 6、参考文章 1、问题产生的背景 因为本人最近工作相关的对接外部项目,在我们国内有很多程序员都是使用汉语拼音或者部分字母加上英文复合体定义返回实体VO,这样为了能够符合…...

每天五分钟机器学习:你理解贝叶斯公式吗?

本文重点 贝叶斯算法是机器学习算法中非常经典的算法,也是非常古老的一个算法,但是它至今仍然发挥着重大的作用,本节课程及其以后的专栏将会对贝叶斯算法来做一个简单的介绍。 贝叶斯公式 贝叶斯公式是由联合概率推导而来 其中p(Y|X)称为后验概率,P(Y)称为先验概率…...

C++的入门

C的关键字 C总计63个关键字&#xff0c;C语言32个关键字 命名空间 我们C的就是建立在C语言之上&#xff0c;但是是高于C语言的&#xff0c;将C语言的不足都弥补上了&#xff0c;而命名空间就是为了弥补C语言的不足。 看一下这个例子。在C语言中会报错 #include<stdio.h>…...

数据的存储

类型的意义&#xff1a;使用这个类型开辟内存空间的大小&#xff08;大小决定了使用范围&#xff09;如何看待内存空间视角类型的基本归类整型家族浮点数家族构造类型指针类型空类型整型存储解构:整型在计算机中占用四个字节&#xff0c;整型分为无符号整型和有符号整型在计算机…...

Linux查看UTC时间

先了解一下几个时间概念。 GMT时间&#xff1a;Greenwich Mean Time&#xff0c;格林尼治平时&#xff0c;又称格林尼治平均时间或格林尼治标准时间。是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。 GMT时间存在较大误差&#xff0c;因此不再被作为标准时间使用。现在…...

SpringBoot修改启动图标(详细步骤)

目录 一、介绍 二、操作步骤 三、介绍Java学习&#xff08;题外话&#xff09; 四、关于基础知识 一、介绍 修改图标就是在资源加载目录&#xff08;resources&#xff09;下放一个banner.txt文件。这样运行加载的时候就会扫描到这个文件&#xff0c;然后启动的时候就会显…...

【每日一题Day143】面试题 17.05. 字母与数字 | 前缀和+哈希表

面试题 17.05. 字母与数字 给定一个放有字母和数字的数组&#xff0c;找到最长的子数组&#xff0c;且包含的字母和数字的个数相同。 返回该子数组&#xff0c;若存在多个最长子数组&#xff0c;返回左端点下标值最小的子数组。若不存在这样的数组&#xff0c;返回一个空数组。…...

Go 内置运算符 if for switch

算数运算符fmt.Println("103", 103) //103 13 fmt.Println("10-3", 10-3) //10-3 7 fmt.Println("10*3", 10*3) //10*3 30 //除法注意&#xff1a;如果运算的数都是整数&#xff0c;那么除后&#xff0c;去掉小数部分&#xff0c;保留整数部分 f…...

C语言指针数组实际应用(嵌入式)

C语言指针数组详细学习 指针是C语言中非常重要的概念之一&#xff0c;它可以让我们直接访问内存中的数据。指针数组则是由多个指针组成的数组&#xff0c;每个指针都可以指向内存中的某个位置。以下是一些指针数组的实际代码应用&#xff1a; 字符串数组 char* names[] {&q…...

常用的Java注解详解

Java是一种常用的编程语言&#xff0c;而注解是Java语言中非常重要的一部分。在这篇文章中&#xff0c;我们将介绍一些常用的Java注解&#xff0c;以及它们的作用和使用方法。 Override override注解是用于表示一个方法是被覆盖的。在Java中&#xff0c;如果子类要覆盖父类的方…...

华为OD机试题 - 第 K 个最小码值的字母(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:第 K 个最小码值的字母题目输入输出示例一输入输出说明示例一输…...

vscode环境配置(支持跳转,阅读linux kernel)

目录 1.卸载clangd插件 2.安装C插件 3. 搜索框内输入 “intell”&#xff0c;将 C_Cpp&#xff1a;Intelli Sense Engine 开关设置为 Default。 4.ubuntu安装global工具 5.vscode安装插件 6.验证是否生效 7.建立索引 1.卸载clangd插件 在插件管理中卸载clangd插件 2.安…...

zigbee学习笔记:IO操作

1、IAR新建工程 &#xff08;1&#xff09;Projetc→Create New Projetc→OK→选择位置&#xff0c;确定 &#xff08;2&#xff09;新建一个c文件&#xff0c;保存在路径中 &#xff08;3&#xff09;点击工程&#xff0c;右键→add→加入c文件 &#xff08;4&#xff09;…...

网页制作与网站建设实战大全/短视频seo排名

防止SQL注入攻击的方法发布时间&#xff1a;2020-08-25 14:18:13来源&#xff1a;亿速云阅读&#xff1a;78作者&#xff1a;小新小编给大家分享一下防止SQL注入攻击的方法&#xff0c;相信大部分人都还不怎么了解&#xff0c;因此分享这篇文章给大家参考一下&#xff0c;希望大…...

0元试用网站开发/vi设计公司

我正在尝试通过Ubuntu控制台执行TCL脚本&#xff0c;在控制台中执行示例测试脚本tcl Main.tcl -file xxxx -test xxxx | tee test.log在没有执行我的脚本最大大小超出Tcl值(2147483647字节)的情况下抛出错误消息我的机器TCL版本% puts $tcl_version8.6我的机器TCL平台% parray …...

外汇网站建设公司/网站建设包括哪些内容

1.前言大家都知道分区工具有两种&#xff0c;一种是fdisk&#xff0c;一种是parted&#xff0c;最常用的是fdisk。但是随着时代的发展&#xff0c;科技的进步&#xff0c;TB级的数据越来越多&#xff0c;对于最大只支持2.2TB的fdisk来说已经满足不了生产环境的需求&#xff0c;…...

网站的ppt方案怎么做/网站日常维护有哪些

top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;常用于服务端性能分析。 top命令说明 [tongqianzhangshwgq-t-tomcat-188-193 ~]$ top top - 16:07:37 up 241 days, 20:11, 1 user, load average: 0.96, 1.13, 1.25 …...

在美国买云主机做网站/杭州seo渠道排名

出处&#xff1a;http://www.zuola.com/weblog/?p516作者&#xff1a;Zola 前几天&#xff0c;有朋友跟我聊在家乡办厂的事&#xff0c;他们从广东考察了几家公司&#xff0c;拿回一些原材料准备在家乡利用农村劳动力来办厂&#xff0c;朋友以为我是一个管理人才&#xff0c;跟…...

免费推广网站有哪些平台/厦门网站seo

详细资料请前往官方售后QQ群下载查看 本次更新内容为在4412开发板上移植2020版本的uboot&#xff0c;从0开始&#xff0c;手把手教您移植uboot,快来学习吧~ “光盘默认的Uboot镜像只可以烧写小于4G的文件系统&#xff0c;想要文件系统设定成6G或者更大的空间&#xff0c;应该怎…...