首页 > 其他分享 >【MindSpore学习打卡】初学教程-04数据集 Dataset-使用MindSpore实现高效数据加载与预处理

【MindSpore学习打卡】初学教程-04数据集 Dataset-使用MindSpore实现高效数据加载与预处理

时间:2024-06-21 20:59:20浏览次数:11  
标签:__ 04 self dataset train 打卡 数据 MindSpore

在深度学习的世界里,数据是模型训练的根基。高质量的数据输入不仅能提升模型的性能,还能加速训练过程。MindSpore 提供了一个强大的数据引擎,通过数据集(Dataset)和数据变换(Transforms)实现高效的数据预处理。本文将详细介绍如何使用 MindSpore 加载和处理数据集,并通过具体的示例代码和图示帮助读者更好地理解这些操作的必要性和优势。

数据集加载

首先,我们以著名的 MNIST 数据集为例,介绍如何使用 mindspore.dataset 进行数据加载。MNIST 数据集是手写数字的图像数据集,广泛用于图像分类的入门教程中。

下载和解压数据集

from download import download

url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip"
path = download(url, "./", kind="zip", replace=True)

加载数据集

下载并解压数据集后,我们可以使用 MnistDataset 进行加载。

from mindspore.dataset import MnistDataset

train_dataset = MnistDataset("MNIST_Data/train", shuffle=False)
print(type(train_dataset))

数据集迭代

加载数据集后,我们通常需要以迭代的方式获取数据,然后送入神经网络进行训练。MindSpore 提供了 create_tuple_iteratorcreate_dict_iterator 接口来创建数据迭代器。

def visualize(dataset):
    import matplotlib.pyplot as plt
    figure = plt.figure(figsize=(4, 4))
    cols, rows = 3, 3

    plt.subplots_adjust(wspace=0.5, hspace=0.5)

    for idx, (image, label) in enumerate(dataset.create_tuple_iterator()):
        figure.add_subplot(rows, cols, idx + 1)
        plt.title(int(label))
        plt.axis("off")
        plt.imshow(image.asnumpy().squeeze(), cmap="gray")
        if idx == cols * rows - 1:
            break
    plt.show()

visualize(train_dataset)

MNIST 数据集可视化

数据集常用操作

MindSpore 的 Pipeline 设计理念使得数据集的常用操作采用 dataset = dataset.operation() 的异步执行方式。以下是几种常见的数据集操作。

shuffle

数据集随机 shuffle 可以消除数据排列造成的分布不均问题。这种操作可以防止模型在训练过程中因为数据顺序的固定而导致的过拟合现象,从而提高模型的泛化能力。

train_dataset = train_dataset.shuffle(buffer_size=64)
visualize(train_dataset)

map

map 操作是数据预处理的关键操作,可以对数据集指定列(column)添加数据变换(Transforms)。这一步的目的是对数据进行标准化、归一化等预处理操作,使得数据更适合神经网络的输入要求。例如,对图像数据进行归一化处理,可以加速模型的收敛。

from mindspore.dataset import vision

train_dataset = train_dataset.map(vision.Rescale(1.0 / 255.0, 0), input_columns='image')
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)

batch

将数据集打包为固定大小的 batch 是在有限硬件资源下使用梯度下降进行模型优化的折中方法。通过将数据分批次处理,可以充分利用 GPU 等硬件资源,提高训练效率,同时保证梯度下降的随机性和优化计算量。

train_dataset = train_dataset.batch(batch_size=32)
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)

自定义数据集

对于一些特殊的数据集,可能无法直接使用 MindSpore 提供的内置加载接口。这时候,构造自定义数据加载类或生成函数,可以灵活地处理各种数据格式和数据源,满足不同的应用需求。通过 GeneratorDataset 接口,可以方便地将自定义的数据集加载到 MindSpore 中进行处理和训练。

可随机访问数据集

可随机访问数据集是实现了 __getitem____len__ 方法的数据集。

import numpy as np
from mindspore.dataset import GeneratorDataset

class RandomAccessDataset:
    def __init__(self):
        self._data = np.ones((5, 2))
        self._label = np.zeros((5, 1))

    def __getitem__(self, index):
        return self._data[index], self._label[index]

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

loader = RandomAccessDataset()
dataset = GeneratorDataset(source=loader, column_names=["data", "label"])

for data in dataset:
    print(data)

可迭代数据集

可迭代的数据集是实现了 __iter____next__ 方法的数据集。

class IterableDataset():
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def __next__(self):
        return next(self.data)

    def __iter__(self):
        self.data = iter(range(self.start, self.end))
        return self

loader = IterableDataset(1, 5)
dataset = GeneratorDataset(source=loader, column_names=["data"])

for d in dataset:
    print(d)

生成器

生成器也属于可迭代的数据集类型,其直接依赖 Python 的生成器类型 generator 返回数据。

def my_generator(start, end):
    for i in range(start, end):
        yield i

dataset = GeneratorDataset(source=lambda: my_generator(3, 6), column_names=["data"])

for d in dataset:
    print(d)

通过本文的介绍,相信读者已经对使用 MindSpore 进行数据集加载与预处理有了一个全面的了解。无论是使用内置的数据集加载接口,还是通过自定义数据集接口进行数据加载,MindSpore 都提供了丰富且灵活的解决方案。希望这些示例代码和图示能够帮助大家更好地掌握数据处理的技巧,为后续的深度学习模型训练打下坚实的基础。未来,随着数据规模和复杂性的增加,掌握高效的数据处理方法将变得越来越重要,而 MindSpore 无疑是一个值得信赖的工具。
在这里插入图片描述

标签:__,04,self,dataset,train,打卡,数据,MindSpore
From: https://blog.csdn.net/weixin_43427267/article/details/139869594

相关文章

  • 【MindSpore学习打卡】初学教程-03张量Tensor-理解MindSpore中的张量(Tensor)操作
    03张量Tensor-理解MindSpore中的张量(Tensor)操作在深度学习领域,张量(Tensor)是最基本的数据结构之一。它不仅可以表示标量、向量和矩阵,还可以表示更高维度的数据。张量在神经网络的构建和训练中扮演着至关重要的角色。在MindSpore中,张量是网络运算的基本单位。本篇博客将详......
  • Day57 代码随想录打卡|二叉树篇---修建二叉搜索树
    题目(leecodeT669):给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树 不应该 改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答......
  • 【经验分享】Ubuntu 24.04 安装搜狗输入法(亲测有效)
    【经验分享】Ubuntu24.04安装搜狗输入法(亲测有效)先用如下Ubuntu22.04的安装方法进行安装Ubuntu22.04安装搜狗输入法发现存在闪屏问题,那解决闪屏问题不就好了。解决方法如下:解决方法1Ubuntu24.04安装搜狗输入法-解决闪屏问题修改配置文件/etc/gdm3/custom.conf,强......
  • Ubuntu 20.04 上安装和使用 Docker
    如何在Ubuntu20.04上安装和使用Docker如何在Ubuntu20.04上安装和使用Docker-阿里云开发者社区(aliyun.com) 简介:本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-use-docker-on-ubuntu-20-04/Docker是一个开源的容器化平台,它允许你构建,......
  • 004话题通信-API的使用
    目录(一)常用API1初始化1.1初始化函数(c++)(1)函数一般表达式:(2)使用 (3)举例(c++)案例1:argc与argv使用要求cmakelists.txt配置代码效果图案例2:options的使用要求cmakelists.txt配置代码效果图1.2初始化函数(python)(1)一般表达式(2)使用(3)举例 案例1:argc与argv使用......
  • SFF2004A-ASEMI无人机专用SFF2004A
    编辑:llSFF2004A-ASEMI无人机专用SFF2004A型号:SFF1006A品牌:ASEMI封装:ITO-220AC最大平均正向电流(IF):20A最大循环峰值反向电压(VRRM):400V最大正向电压(VF):0.95V~1.90V工作温度:-55°C~150°C反向恢复时间:35ns芯片个数:1芯片尺寸:72mil引脚数量:2正向浪涌电流(IFMS):200A包装方式:50/......
  • 10个超好看的 404 页面(附源码)
    今天来分享10个超好看的404页面,带动画效果。代码:https://codepen.io/AsyrafHussin/pen/KxWRrK代码:https://codepen.io/salehriaz/pen/erJrZM代码:https://codepen.io/andrew-lawendy/pen/deOpMZ代码:https://codepen.io/Mahi-K/pen/rNzBGgq代码:https://codepen.......
  • 代码随想录算法训练营第17天 | 二叉树04
    代码随想录算法训练营第17天找树左下角的值https://leetcode.cn/problems/find-bottom-left-tree-value/找树左下角的值代码随想录https://leetcode.cn/problems/find-bottom-left-tree-value/路径总和https://leetcode.cn/problems/path-sum/description/路径总和2https......
  • Ubuntu 22.04 安装MariaDB 提供本地服务
    打开终端。更新包列表:sudoaptupdate安装MariaDB服务器:sudoaptinstallmariadb-server安装完成后,运行安全安装脚本来设置密码和调整安全选项:sudomysql_secure_installationroot@seafile-server:/opt#mysql_secure_installationNOTE:RUNNING......
  • 昇思25天学习打卡营第1天 | 快速入门
    官网完整版代码详解题外话:这几天人工智能实训,在学深度学习,我觉得蛮像的过程理解:1.数据预处理1.1load数据集1.2查看数据集对象的结构和类型1.3数据变换MindSpore的dataset使用数据处理流水线(DataProcessingPipeline),需指定map、batch、shuffle等操作。使用map对图像数据......