返回顶部
首页 > 资讯 > 后端开发 > Python >PyTorch数据读取的实现示例
  • 805
分享到

PyTorch数据读取的实现示例

2024-04-02 19:04:59 805人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

前言 PyTorch作为一款深度学习框架,已经帮助我们实现了很多很多的功能了,包括数据的读取和转换了,那么这一章节就介绍一下PyTorch内置的数据读取模块吧 模块介绍 pan

前言

PyTorch作为一款深度学习框架,已经帮助我们实现了很多很多的功能了,包括数据的读取和转换了,那么这一章节就介绍一下PyTorch内置的数据读取模块吧

模块介绍

  • pandas 用于方便操作含有字符串的表文件,如csv
  • zipfile python内置的文件解压包
  • cv2 用于图片处理的模块,读入的图片模块为BGR,N H W C
  • torchvision.transfORMs 用于图片的操作库,比如随机裁剪、缩放、模糊等等,可用于数据的增广,但也不仅限于内置的图片操作,也可以自行进行图片数据的操作,这章也会讲解
  • torch.utils.data.Dataset torch内置的对象类型
  • torch.utils.data.DataLoader 和Dataset配合使用可以实现数据的加速读取和随机读取等等功能

import zipfile # 解压
import pandas as pd # 操作数据
import os # 操作文件或文件夹
import cv2 # 图像操作库
import matplotlib.pyplot as plt # 图像展示库
from torch.utils.data import Dataset # PyTorch内置对象
from torchvision import transforms # 图像增广转换库 PyTorch内置
import torch 

初步读取数据

数据下载到此处
我们先初步编写一个脚本来实现图片的展示


# 解压文件到指定目录
def unzip_file(root_path, filename):
  full_path = os.path.join(root_path, filename)
  file = zipfile.ZipFile(full_path)
  file.extractall(root_path)
unzip_file(root_path, zip_filename)

# 读入csv文件
face_landmarks = pd.read_csv(os.path.join(extract_path, csv_filename))

# pandas读出的数据如想要操作索引 使用iloc
image_name = face_landmarks.iloc[:,0]
landmarks = face_landmarks.iloc[:,1:]

# 展示
def show_face(extract_path, image_file, face_landmark):
  plt.imshow(plt.imread(os.path.join(extract_path, image_file)), cmap='gray')
  point_x = face_landmark.to_numpy()[0::2]
  point_y = face_landmark.to_numpy()[1::2]
  plt.scatter(point_x, point_y, c='r', s=6)
  
show_face(extract_path, image_name.iloc[1], landmarks.iloc[1])

在这里插入图片描述

使用内置库来实现

实现MyDataset

使用内置库是我们的代码更加的规范,并且可读性也大大增加
继承Dataset,需要我们实现的有两个地方:

  • 实现__len__返回数据的长度,实例化调用len()时返回
  • __getitem__给定数据的索引返回对应索引的数据如:a[0]
  • transform 数据的额外操作时调用

class FaceDataset(Dataset):
  def __init__(self, extract_path, csv_filename, transform=None):
    super(FaceDataset, self).__init__()
    self.extract_path = extract_path
    self.csv_filename = csv_filename
    self.transform = transform
    self.face_landmarks = pd.read_csv(os.path.join(extract_path, csv_filename))
  def __len__(self):
    return len(self.face_landmarks)
  def __getitem__(self, idx):
    image_name = self.face_landmarks.iloc[idx,0]
    landmarks = self.face_landmarks.iloc[idx,1:].astype('float32')
    point_x = landmarks.to_numpy()[0::2]
    point_y = landmarks.to_numpy()[1::2]
    image = plt.imread(os.path.join(self.extract_path, image_name))
    sample = {'image':image, 'point_x':point_x, 'point_y':point_y}
    if self.transform is not None:
      sample = self.transform(sample)
    return sample

测试功能是否正常


face_dataset = FaceDataset(extract_path, csv_filename)
sample = face_dataset[0]
plt.imshow(sample['image'], cmap='gray')
plt.scatter(sample['point_x'], sample['point_y'], c='r', s=2)
plt.title('face')

在这里插入图片描述

实现自己的数据处理模块

内置的在torchvision.transforms模块下,由于我们的数据结构不能满足内置模块的要求,我们就必须自己实现
图片的缩放,由于缩放后人脸的标注位置也应该发生对应的变化,所以要自己实现对应的变化


class Rescale(object):
  def __init__(self, out_size):
    assert isinstance(out_size,tuple) or isinstance(out_size,int), 'out size isinstance int or tuple'
    self.out_size = out_size
  def __call__(self, sample):
    image, point_x, point_y = sample['image'], sample['point_x'], sample['point_y']
    new_h, new_w = self.out_size if isinstance(self.out_size,tuple) else (self.out_size, self.out_size)
    new_image = cv2.resize(image,(new_w, new_h))
    h, w = image.shape[0:2]
    new_y = new_h / h * point_y
    new_x = new_w / w * point_x
    return {'image':new_image, 'point_x':new_x, 'point_y':new_y}

将数据转换为torch认识的数据格式因此,就必须转换为tensor
注意: cv2matplotlib读出的图片默认的shape为N H W C,而torch默认接受的是N C H W因此使用tanspose转换维度,torch转换多维度使用permute


class ToTensor(object):
  def __call__(self, sample):
    image, point_x, point_y = sample['image'], sample['point_x'], sample['point_y']
    new_image = image.transpose((2,0,1))
    return {'image':torch.from_numpy(new_image), 'point_x':torch.from_numpy(point_x), 'point_y':torch.from_numpy(point_y)}

测试


transform = transforms.Compose([Rescale((1024, 512)), ToTensor()])
face_dataset = FaceDataset(extract_path, csv_filename, transform=transform)
sample = face_dataset[0]
plt.imshow(sample['image'].permute((1,2,0)), cmap='gray')
plt.scatter(sample['point_x'], sample['point_y'], c='r', s=2)
plt.title('face')

在这里插入图片描述

使用Torch内置的loader加速读取数据


data_loader = DataLoader(face_dataset, batch_size=4, shuffle=True, num_workers=0)
for i in data_loader:
  print(i['image'].shape)
  break

torch.Size([4, 3, 1024, 512])

注意: windows环境尽量不使用num_workers会发生报错

总结

这节使用内置的数据读取模块,帮助我们规范代码,也帮助我们简化代码,加速读取数据也可以加速训练,数据的增广可以大大的增加我们的训练精度,所以本节也是训练中比较重要环节

到此这篇关于PyTorch数据读取的实现示例的文章就介绍到这了,更多相关PyTorch数据读取内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PyTorch数据读取的实现示例

本文链接: https://lsjlt.com/news/122434.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PyTorch数据读取的实现示例
    前言 PyTorch作为一款深度学习框架,已经帮助我们实现了很多很多的功能了,包括数据的读取和转换了,那么这一章节就介绍一下PyTorch内置的数据读取模块吧 模块介绍 pan...
    99+
    2024-04-02
  • pytorch读取自制数据集的示例分析
    小编给大家分享一下pytorch读取自制数据集的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题1问题描述:TypeError: default_col...
    99+
    2023-06-15
  • pytorch dataset实战案例之读取数据集的代码
    目录概述项目结构与代码总结参考资料概述 最近在跑一篇图像修复论文的代码,配置好环境之后开始运行,发现数据一直加载不进去。害,还是得看人家代码咋写的,一句一句看逻辑,准能找出问题。通读...
    99+
    2024-04-02
  • 如何使用PyTorch实现自由的数据读取
    目录前言PyTorch数据读入函数介绍ImageFolderDatasetDataLoader问题来源自定义数据读入的举例实现总结前言 很多前人曾说过,深度学习好比炼丹,框架就是丹炉...
    99+
    2024-04-02
  • Pytorch数据读取与预处理的实现方法
    这篇文章给大家分享的是有关Pytorch数据读取与预处理的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  在炼丹时,数据的读取与预处理是关键一步。不同的模型所需要的数据以及预处理方式各不相同,如果每个轮...
    99+
    2023-06-14
  • Pytorch数据读取与预处理该如何实现
      在炼丹时,数据的读取与预处理是关键一步。不同的模型所需要的数据以及预处理方式各不相同,如果每个轮子都我们自己写的话,是很浪费时间和精力的。Pytorch帮我们实现了方便的数据读取...
    99+
    2024-04-02
  • SpringBoot+thymeleaf+Echarts+Mysql实现数据可视化读取的示例
    目录实现过程1. pom.xml2. 后端程序示例3. 前端程序示例通过从数据库获取数据转为JSON数据,返回前端界面实现数据可视化。 数据可视化测试 实现过程 1. pom....
    99+
    2024-04-02
  • 使用pytorch读取数据集
    目录pytorch读取数据集第一种第二种第三种pytorch学习记录注意事项pytorch读取数据集 使用pytorch读取数据集一般有三种情况 第一种 读取官方给的数据集,例如Im...
    99+
    2024-04-02
  • 使用PyTorch怎么读取数据
    本篇文章给大家分享的是有关使用PyTorch怎么读取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。模块介绍pandas 用于方便操作含有字符串的表文件,如csvzipfil...
    99+
    2023-06-14
  • pytorch如何读取csv数据集
    要使用PyTorch读取CSV数据集,可以使用Python的pandas库来加载CSV文件,并将其转换为PyTorch张量。下面是一...
    99+
    2023-10-09
    pytorch
  • Java读取数据库表的示例代码
    目录Java读取数据库表新手引导LoggerConnectionResultSetResultSet中next()方法name和commentJava读取数据库表 package c...
    99+
    2023-05-18
    Java读取数据库表 Java数据库表
  • 怎么使用pytorch读取数据集
    这篇“怎么使用pytorch读取数据集”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用pytorch读取数据集”文章吧...
    99+
    2023-06-30
  • Halcon读取json文件实现示例
    目录核心知识:一、get_dict_ttuple算子二、get_dict_param算子三、实践(直接上代码)核心知识: get_dict_tuple、get_dict_param的...
    99+
    2024-04-02
  • Android设备与外接U盘实现数据读取操作的示例
    现在越来越多手机支持OTG功能,通过OTG可以实现与外接入的U盘等USB设备实现数据传输。 USB OTG(On The Go)作为USB2.0的补充协议,于2001年由USB-IF提出。它提出的背景是移动消费类电子产品的迅猛增加...
    99+
    2023-05-30
    android u盘 数据读取
  • android读写sd卡操作写入数据读取数据示例
    代码如下:package com.example.sdcardtest;import java.io.BufferedReader;import java.io.File;i...
    99+
    2022-06-06
    示例 数据 sd sd卡 Android
  • spark读取hbase的数据实例代码
    这篇文章主要介绍“spark读取hbase的数据实例代码”,在日常操作中,相信很多人在spark读取hbase的数据实例代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”spark读取hbase的数据实例代码...
    99+
    2023-06-02
  • 解决pytorch读取自制数据集出现过的问题
    问题1 问题描述: TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, d...
    99+
    2024-04-02
  • Android实现读取NFC卡卡号示例
    Android实现读取NFC卡卡号示例,具体如下: 1.权限 <uses-permission android:name="android.permission....
    99+
    2022-06-06
    示例 nfc Android
  • echarts动态获取Django数据的实现示例
    目录一、后端二、前端三、页面效果四、总结在开发过程中我们需要将我们的数据通过图标的形式展现出来,接下来我为大家介绍一个有趣的框架:Echarts。这是一个使用JavaScript实现...
    99+
    2024-04-02
  • python读取npy文件数据实例
    目录1. 读取与保存2. 实战案例附:python中 .npy文件的读写操作实例总结Numpy binary files (NPY, NPZ) 注:.npy文件是numpy专用的二进...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作