数据加载分为加载torchvision.datasets中的数据集以及加载自己使用的数据集两种情况。
torchvision.datasets中的数据集
torchvision.datasets中自带MNIST,Imagenet-12,CIFAR等数据集,所有的数据集都是torch.utils.data.Dataset的子类,都包含 _ _ len _
(获取数据集长度)和
_ getItem _ _ (获取数据集中每一项)两个子方法。
Dataset源码如上,可以看到其中包含了两个没有实现的子方法,之后所有的Dataet类都继承该类,并根据数据情况定制这两个子方法的具体实现。
因此当我们需要加载自己的数据集的时候也可以借鉴这种方法,只需要继承torch.utils.data.Dataset类并重写 init ,len,以及getitem这三个方法即可。这样组着的类可以直接作为参数传入到torch.util.data.DataLoader中去。
以CIFAR10为例
源码
:
class torchvision.datasets.CIFAR10(root, train=True, transform=None, target_transform=None, download=False)
root (string) – Root directory of dataset where directory cifar-10-batches-py exists or will be saved to if download is set to True.
train (bool, optional) – If True, creates dataset from training set, otherwise creates from test set.
transform (callable, optional) – A function/transform that takes in an PIL image and returns a transformed version. E.g, transforms.RandomCrop
target_transform (callable, optional) – A function/transform that takes in the target and transforms it.
download (bool, optional) – If true, downloads the dataset from the internet and puts it in root directory. If dataset is already downloaded, it is not downloaded again.
加载自己的数据集
对于torchvision.datasets中有两个不同的类,分别为DatasetFolder和ImageFolder,ImageFolder是继承自DatasetFolder。
下面我们通过源码来看一看folder文件中DatasetFolder和ImageFolder分别做了些什么
import torch.utils.data as data
from PIL import Image
import os
import os.path
def has_file_allowed_extension(filename, extensions): //检查输入是否是规定的扩展名
"""Checks if a file is an allowed extension.
Args:
filename (string): path to a file
Returns:
bool: True if the filename ends with a known image extension
filename_lower = filename.lower()
return any(filename_lower.endswith(ext) for ext in extensions)
def find_classes(dir):
classes = [d for d in os.listdir(dir) if os.path.isdir(os.path.join(dir, d))] //获取root目录下所有的文件夹名称
classes.sort()
class_to_idx = {classes[i]: i for i in range(len(classes))} //生成类别名称与类别id的对应Dictionary
return classes, class_to_idx
def make_dataset(dir, class_to_idx, extensions):
images = []
dir = os.path.expanduser(dir)// 将~和~user转化为用户目录,对参数中出现~进行处理
for target in sorted(os.listdir(dir)):
d = os.path.join(dir, target)
if not os.path.isdir(d)
本文意在对
Pytorch
的分布式框架和
数据
处理流程进行调研,方便之后对AI训练框架对接分布式
数据
库做准备。主要是为了应对AI任务训练
数据
量的逐渐增大,以及
数据
分散无法集中处理的情况。目前也在研究中。
下
载
安装GPU版的
Pytorch
网络上已经有很多教程,Anaconda+
PyTorch
这里推荐b站的,简单易懂,跟着一步步走大体上是没有问题的视频是2022年的,2023年
pytorch
更新版本后有些许的不一样,下面分享下我这次下
载
安装遇到的问题和解决办法。
在创建Jupyter笔记本之后,我们先来学习一下Numpy。Numpy是python中最常见的用于科学计算的基础包,有对数组进行快速操作的一系列方法,包括数学运算、逻辑运算、分片操作、排序、选择、输入输出、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等。
Numpy的核心是ndarray对象,它封装了相同
数据
类型的n维数组。
Numpy的数组类为ndarray,通常也被称作数组。ndarray对象的属性有:
ndarray.ndim: 数组轴的个数
ndarray.shape: 数.
当保存和
加
载
模型时,需要熟悉三个核心功能:
torch.save:将序列化对象保存到磁盘。此函数使用Python的pickle模块进行序列化。使用此函数可以保存如模型、tensor、字典等各种对象。
torch.load:使用pickle的unpickling功能,将pickle对象文件反序列化到内存。此功能还可以有助于设备
加
载
数据
。
torch.nn.Module.load_state_dict:使用反序列化函数 state_dict 来
加
载
模型的参数字典。
什么是状态字典:state_
创建一个类,继承自torch.utils.data.Dataset,并重写__len__()和__init__用于向类中传入外部参数,同时定义样本集__len__()方法应该返回
数据
集的大小方法应该返回一个样本这里另外给出一个例子,其中图片存放在一个文件夹,另外有一个csv文件给出了图片名称对应的标签。Args:Args:Returns:其中:batch_size:样本是按“批”读入的,batch_size就是每次读入的样本数。
torchvision.transforms是一个包含了常用的图像变化方法的工具包,该工具包主要用于图像
预处理
、
数据
增强等工作之中。本实验,将详细介绍torchvision.transforms中常用的
数据
处理函数。
第四节:
Pytorch
数据
处理与模型保存
本节将讲解
数据
操作与模型保存
其中
数据
处理包含
数据
处理与
数据
导入,
数据
处理能够帮助导入训练
数据
集,对
数据
进行正则化等功能
此外模型保存将会帮助我们保存已有的成果
这节讲解完毕我们就已经能够训练我们自己的网络,下一节我们将讲解网络结构可视化相关工具来帮助我们检测、表达网络的结构
数据
处理
Pytorch
的torch.util.data模块中包含着一系列常用的
数据
预处理
的函数或类,其中有
数据
的读取、切分、准备等内容
我们下面对于某一类任务的具体
数据
处理都将基于
1. 我们经常可以看到
Pytorch
加
载
数据
集会用到官方整理好的
数据
集。很多时候我们需要
加
载
自己的
数据
集,这时候我们需要使用Dataset和DataLoader
Dataset:是被封装进DataLoader里,实现该方法封装自己的
数据
和标签。
DataLoader:被封装入DataLoaderIter里,实现该方法达到
数据
的划分。
2.Dataset
阅读源码后,我们可以指导,继承该方法必须.........