昇思25天学习打卡营第4天|MindSpore数据集和数据变换

# 打卡

目录

# 打卡

Dateset:Pipeline 的起始

具体步骤

数据处理 Pipeline

代码例子

内置数据集的情况

自定义数据集的情况

可迭代的数据集

生成器

Transforms:数据预处理

代码例子

通用变换Compose

文本变换 Text

Lambda变换


Dateset:Pipeline 的起始

mindspore.dataset — MindSpore master 文档

MindSpore Dataset 是所有数据集的基类,提供了数据处理方法来帮助用户很简便地定义数据预处理Pipeline,并以最高效(多进程/多线程)的方式处理数据集中的样本。 可用于数据集加载、迭代、操作。

具体步骤

  1. 加载数据集:1)用 *Dataset 类来加载已支持的数据集;2)通过 UDF Loader + GeneratorDataset 实现Python层自定义数据集的加载。// mindspore.dataset提供的接口仅支持解压后的数据文件,可用download库下载数据集并解压。
  2. 数据集操作:通过数据集对象方法 .shuffle / .filter / .skip / .split / .take / … 来实现数据集的进一步混洗、过滤、跳过、最多获取条数等操作。
  3. 数据集样本增强操作:将数据增强操作 (vision类 , nlp类 , audio类 ) 添加到map操作中执行,数据预处理过程中可以定义多个map操作,用于执行不同增强操作,数据增强操作也可以是 用户自定义增强的 PyFunc ;
  4. 批:用 .batch 操作将多个样本组织成batch,也可以通过batch的参数 per_batch_map 来自定义batch逻辑;
  5. 迭代器:通过数据集对象方法 create_tuple_iterator或create_dict_iterator 接口来创建迭代器, 可以将预处理完成的数据循环输出。

数据处理 Pipeline

  • 内置开源数据集分为视觉、文本、音频类。
  • 内置数据格式分为标准格式、用户自定义等。
  • 内置其他数据集处理接口,如采样器模块、全局配置模块等。

例如,视觉类(Cifar10Dataset、Cifar100Dataset、FashionMnistDataset、Food101Dataset、KITTIDataset、MnistDataset、QMnistDataset、VOCDataset、WIDERFaceDataset 等),文本类(AGNewsDataset、CLUEDataset、DBpediaDataset、IMDBDataset、SQuADDataset、TextFileDataset、WikiTextDataset、YahooAnswersDataset、YelpReviewDataset 等),音频类(CMUArcticDataset、GTZANDataset、LibriTTSDataset、LJSpeechDataset、SpeechCommandsDataset、TedliumDataset、YesNoDataset 等)。

例如,标准格式(CSVDataset、MindDataset、OBSMindDataset、TFRecordDataset ),用户自定义格式(GeneratorDataset、NumpySlicesDataset、PaddedDataset、RandomDataset)

  • map操作可以针对数据集指定列(column)添加数据变换(Transforms),将数据变换应用于该列数据的每个元素,并返回包含变换后元素的新数据集。
  • batch操作可以将数据集打包为固定大小的batch,是在有限硬件资源下使用梯度下降进行模型优化的折中方法,可以保证梯度下降的随机性和优化计算量。

代码例子

内置数据集的情况

import numpy as np
from mindspore.dataset import vision
from mindspore.dataset import MnistDataset, GeneratorDataset
import matplotlib.pyplot as plt
from download import downloadurl = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip"
path = download(url, "./", kind="zip", replace=True)train_dataset = MnistDataset("MNIST_Data/train", shuffle=False)
print(type(train_dataset))def visualize(dataset):figure = plt.figure(figsize=(4, 4))cols, rows = 4, 3plt.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:breakplt.show()### shuffle
train_dataset = train_dataset.shuffle(buffer_size=64)
visualize(train_dataset)### 迭代访问
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype, label)
plt.imshow(image.asnumpy().squeeze(), cmap="gray")### 数据缩放处理map
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, label)
plt.imshow(image.asnumpy().squeeze(), cmap="gray")### batch打包数据
train_dataset = train_dataset.batch(batch_size=32)
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)   ## 32个打包图片

自定义数据集的情况

下面自定义的可随机访问数据集是实现了 `__getitem__` 和 `__len__` 方法的数据集,表示可以通过索引/键直接访问对应位置的数据样本。

import numpy as np
from mindspore.dataset import vision
from mindspore.dataset import MnistDataset, GeneratorDataset
import matplotlib.pyplot as plt# Random-accessible object as input source
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)# list, tuple are also supported.
loader = [np.array(0), np.array(1), np.array(2)]
dataset = GeneratorDataset(source=loader, column_names=["data"])for data in dataset:print(data)

可迭代的数据集

可迭代的数据集是实现了__iter____next__方法的数据集,表示可以通过迭代的方式逐步获取数据样本。这种类型的数据集特别适用于随机访问成本太高或者不可行的情况。

from mindspore.dataset import vision
from mindspore.dataset import GeneratorDataset# Iterator as input source
class IterableDataset():def __init__(self, start, end):'''init the class object to hold the data'''self.start = startself.end = enddef __next__(self):'''iter one data and return'''return next(self.data)def __iter__(self):'''reset the iter'''self.data = iter(range(self.start, self.end))return selfloader = IterableDataset(1, 5)
dataset = GeneratorDataset(source=loader, column_names=["data"])for d in dataset:print(d)

生成器

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

from mindspore.dataset import vision
from mindspore.dataset import GeneratorDataset# Generator
def my_generator(start, end):for i in range(start, end):yield i# since a generator instance can be only iterated once, we need to wrap it by lambda to generate multiple instances
dataset = GeneratorDataset(source=lambda: my_generator(3, 6), column_names=["data"])for d in dataset:print(d)

Transforms:数据预处理

mindspore.dataset.transforms — MindSpore master 文档

在数据送入模型网络训练前进行的数据预处理操作。

MindSpore Dataset支持的不同变换类型的数据变换,配合数据处理Pipeline来实现数据预处理。所有的Transforms均可通过 map 方法传入,实现对指定数据列的处理。

代码例子

通用变换Compose

Compose接收一个数据增强操作序列,然后将其组合成单个数据增强操作。

下面代码的Compose包括了三个vision视觉变换过程, vision.Rescale、 vision.Normalize、vision.HWC2CHW。

  • Rescale 变换作用分别:用于调整图像像素值的大小,图像的每个像素将根据这rescale缩放因子、shift平移因子两个参数进行调整。输出的像素值为 output_{i} = input_{i} * rescale + shift
  • Normalize变换用于对输入图像的归一化。图像的每个通道将根据meanstd进行调整,output_c = (input_c - mean_c) / std_c,其中 c 代表通道索引。
  • HWC2CHW变换用于转换图像格式。在不同的硬件设备中可能会对(height, width, channel)或(channel, height, width)两种不同格式有针对性优化。MindSpore设置 HWC 为默认图像格式,在有CHW格式需求时,可使用该变换进行处理。
import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDataset
import matplotlib.pyplot as plttrain_dataset = MnistDataset('MNIST_Data/train')image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)composed = transforms.Compose([vision.Rescale(1.0 / 255.0, 0),vision.Normalize(mean=(0.1307,), std=(0.3081,)),vision.HWC2CHW()]
)train_dataset = train_dataset.map(composed, 'image')
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)plt.imshow(image.asnumpy().squeeze(), cmap="gray")

文本变换 Text

mindspore.dataset.transforms — MindSpore master 文档

针对文本数据的Transforms 与图像数据不同,文本数据需要有分词(Tokenize)、构建词表、Token转Index等操作。

  • MindSpore提供多种不同的Tokenizer,以PythonTokenizer举例,它允许用户自由实现分词策略。
  • Lookup为词表映射变换,用来将Token转换为Index。需要先构造词表,这里Vocab.from_dataset 方法从数据集中生成词表。
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, def my_tokenizer(content):## 空格分词return content.split()texts = ['Welcome to Beijing']
test_dataset = GeneratorDataset(texts, 'text')test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))
print(next(test_dataset.create_tuple_iterator()))### 词表构造
vocab = text.Vocab.from_dataset(test_dataset)
print(vocab.vocab())   ## 用vocab方法查看词表。### 词表映射变换
test_dataset = test_dataset.map(text.Lookup(vocab))
print(next(test_dataset.create_tuple_iterator()))

Lambda变换

Lambda函数是一种不需要名字、由一个单独表达式组成的匿名函数,表达式会在调用时被求值。

from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDatasettest_dataset = GeneratorDataset([1, 2, 3], 'data', shuffle=False)
test_dataset = test_dataset.map(lambda x: x * 2)
print(list(test_dataset.create_tuple_iterator()))def func(x):return x * x + 2test_dataset = test_dataset.map(lambda x: func(x))
print(list(test_dataset.create_tuple_iterator()))

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

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

相关文章

【2024华为HCIP831 | 高级网络工程师之路】刷题日记(BGP)

个人名片:🪪 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备🔥重识C语言——复习回顾🔥计算机网络体系———深度详讲HCIP数通工程师-刷题与实战🔥🔥

ubuntu22.04搭建mysql5.7

1.1 下载mysql安装包 MySQL下载地址:MySQL :: Download MySQL Community Server (Archived Versions) #下载wget https://cdn.mysql.com/archives/mysql-5.7/mysql-server_5.7.29-1ubuntu18.04_amd64.deb-bundle.tar#解压tar -xvf ./mysql-server_5.7.29-1ubuntu18…

bash: redi-cli: 未找到命令...

问题描述 在执行命令:redi-cli --bigkeys 提示:bash: redi-cli: 未找到命令... 确定服务器是否有Redis进程 ps -ef | grep redis查找Redis 文件信息 find / -name "redis-*"进入到当前目录 cd /usr/bin/再次执行命令 涉及redis-cli 连…

2.作业2

目录 1.作业题目 A图 B代码 2.css盒子模型 0.css盒子模型 1.外边距(margin) 2.边框(border) 3.内边距(padding) ​编辑 3.GET方法与POST方法的区别 学习产出: html的作业 1.作业题目 A图…

九科bit-Worker RPA 内容学习

简介: 什么是RPA? RPA(Robotic Process Automation,机器人流程自动化)本质上是一种“AI数字员工”,针对企业中存在的大批量、重复性、机械化人工操作,通过模拟人的工作流程使之实现自动化。 b…

Chrome 127内置AI大模型攻略

Chrome 127 集成Gemini:本地AI功能 Google将Gemini大模型整合进Chrome浏览器,带来全新免费的本地AI体验: 完全免费、无限制使用支持离线运行,摆脱网络依赖功能涵盖图像识别、自然语言处理、智能推荐等中国大陆需要借助魔法,懂都懂。 安装部署步骤: 1. Chrome V127 dev …

推出PSoC™ 车规级4100S Max系列,(CY8C4147LDE 和 CY8C4147LDS)支持性能更强大的第五代CAPSENSE™技术

推出全新车规级PSoC™ 4100S Max系列。这一微控制器器件系列具有更佳的闪存密度、通用输入输出接口(GPIO)、CAN-FD和硬件安全性,扩展了采用CAPSENSE™技术的汽车车身/暖通空调(HVAC)和方向盘应用人机界面(H…

Android 10.0 FolderIcon文件夹图标内预览图标超出边距解决方案

1.前言 在10.0的系统rom定制化产品开发中,在进行Launcher3的功能定制化过程中,在实现文件夹功能的时候,由于产品分辨率等原因 在拖拽图标进文件夹的时候,在3*3的布局中,会发现图标出了folder边距,所以就需要分析相关的功能,然后实现解决这个问题 2.FolderIcon文件夹图标…

数据库图形化管理界面应用 Navicat Premium 使用教程

经同学介绍的一个把数据库可视化的软件Navicat Premium,很好用,在这里分享一下,需要的同学可以去了解看看 一:下载并解压 链接:https://pan.baidu.com/s/1ZcDH6m7EAurAp_QmXWx81A 提取码:e5f6 解压到合…

抢拍秒购模式,私域电商营销玩法引流拓客秘籍!

抢拍秒购模式是一种创新的电子商务模式,由微三云平台推出。该模式将传统电商与社交电商的优势相结合,通过限时秒杀的方式,刺激消费者的购买欲望,提升购物效率和销售额。以下是对抢拍秒购模式的详细讲解,包括其优势和玩…

Excel 宏录制与VBA编程 ——VBA编程技巧篇二 (合并内容相同连续单元格、取消合并单元格并在每个单元格中保留内容)

1、合并内容相同的连续单元格 如果需要合并如图所示的工作表中B列中部门相同的连续单元格 VBA代码: Sub Mergerng()Dim IntRow As IntegerDim i As IntegerApplication.DisplayAlerts FalseWith Sheet1IntRow .Range("A65536").End(xlUp).RowFor i In…

运维锅总详解系统设计原则

本文对CAP、BASE、ACID、SOLID 原则、12-Factor 应用方法论等12种系统设计原则进行分析举例,希望对您在进行系统设计、理解系统运行背后遵循的原理有所帮助! 一、CAP、BASE、ACID简介 以下是 ACID、CAP 和 BASE 系统设计原则的详细说明及其应用举例&am…

Sleuth--链路追踪

1 链路追踪介绍 在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成 系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建 在不同的软件模块集上&am…

C++入门基础篇(1)

欢迎大家来到海盗猫鸥的博客—— 断更许久,让我们继续好好学习吧! 目录 1.namespace命名空间 命名空间的存在价值: 命名空间的定义: 命名空间的使用: 2.C输入输出函数 使用: 3.缺省参数 4.函数重载…

理解JS与多线程

理解JS与多线程 什么是四核四线程? 一个CPU有几个核它就可以跑多少个线程,四核四线程就说明这个CPU同一时间最多能够运行四个线程,四核八线程是使用了超线程技术,使得单个核像有两个核一样,速度比四核四线程有多提升。…

背包问题转换

如何转换成背包问题呢&#xff0c;我们可以把每个质数当成一个重量 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;#define int long long int record[1005]; void fun() {//record[2] 1;for (int i 2; i < 1000; i) {if (!record[…

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-5.其他话题分享

4.1 可用性威胁与解决方案 挑战1&#xff1a;BlockServer故障影响众多VD 问题描述&#xff1a;单个BlockServer的故障可能会影响到多个虚拟磁盘&#xff08;VDs&#xff09;的正常运作&#xff0c;这是由于传统架构中BlockServer承担了过多的职责&#xff0c;其稳定性直接关系…

前端vue打印后端对象为[object,object]

今天给自己项目进行编写前端页面时&#xff0c;惊讶的发现&#xff0c;自己进行打印后端传递的对象&#xff0c;一直显示未[object,object]&#xff0c;如下图所示&#xff1a; 感觉很奇怪&#xff0c;于是我猜测是不是自己获取的返回数据的问题&#xff0c;在进行添加了datat…

这几类人,千万不要买纯电车

文 | AUTO芯球 作者 | 响铃 纯电车的冤大头真是太多了&#xff0c; 我之前劝过&#xff0c;有些人不适合买纯电车&#xff0c; 你们看&#xff0c;果然吧&#xff0c;麦卡锡最近的一份报告就披露了 去年啊&#xff0c;22%的人在买了电车后后悔了&#xff0c; 这些人说了&a…

c向c++的过渡

目录 1.不同版本的hello word&#xff01; 2.namespace和&#xff1a;&#xff1a;域作用限定符以及using 2.1 namespace 2.2&#xff1a;&#xff1a; 2.3using用于展开域 3.C输入和输出 4.缺省参数 5.重载 6.引用 1.不同版本的hello word&#xff01; 还记得第一次写C语…