昇思MindSpore学习笔记5--数据变换Transforms

摘要:

昇思MindSpore数据变换,包括通用变换Common Transforms、图像变换Vision Transforms、标准化Normalize文本变换Text Transforms、匿名函数变换Lambda Transforms

一、数据变换Transforms概念

原始数据预处理后才能送入神经网络进行训练

mindspore.dataset.transforms

支持图像、文本、音频等数据类型的数据变换。

支持使用Lambda函数

二、环境准备

安装minspore模块

!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.3.0rc1

导入minspore、dataset等相关模块

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

三、通用变换Common Transforms

mindspore.dataset.transforms模块支持一系列通用Transforms。

下面以Compose为例。

  1. 下载数据集:
# Download data from open datasetsurl = "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')

输出:

Downloading data from https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip (10.3 MB)file_sizes: 100%|███████████████████████████| 10.8M/10.8M [00:00<00:00, 173MB/s]
Extracting zip file...
Successfully downloaded / unzipped to ./

2.加载训练数据集

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)

输出:

(28, 28, 1)

3.数据变换

# 定义compose变换
composed = transforms.Compose([vision.Rescale(1.0 / 255.0, 0),vision.Normalize(mean=(0.1307,), std=(0.3081,)),vision.HWC2CHW()]
)
# 注册compose变换
train_dataset = train_dataset.map(composed, 'image')
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)

输出:

(1, 28, 28)

四、图像变换Vision Transforms

mindspore.dataset.vision模块提供一系列图像数据变换

下面Mnist数据处理过程中,使用了缩放Rescale、标准化Normalize和格式转换HWC2CHW

1. 缩放Rescale

用于调整图像像素值的大小,包括两个参数:

        Rescale :缩放因子

        Shift       :平移因子

输出的像素值 :outputi=inputi*rescale+shift 

下例使用numpy随机生成一个像素值在[0, 255]的图像。

random_np = np.random.randint(0, 255, (48, 48), np.uint8)
random_image = Image.fromarray(random_np)
print(random_np)

输出:

[[104 213  39 ...  78 181 154][ 65  32 142 ...   3  78 137][166 225   9 ...  75 220 173]...[190 134  56 ... 171 213 135][109  57 118 ...   2  78  28][ 86  43  44 ... 186 233 193]]

现在对其像素值进行缩放

rescale = vision.Rescale(1.0 / 255.0, 0)
rescaled_image = rescale(random_image)
print(rescaled_image)

输出:

[[0.40784317 0.8352942  0.15294118 ... 0.30588236 0.70980394 0.6039216 ][0.25490198 0.1254902  0.5568628  ... 0.01176471 0.30588236 0.5372549 ][0.6509804  0.882353   0.03529412 ... 0.29411766 0.86274517 0.6784314 ]...[0.74509805 0.5254902  0.21960786 ... 0.67058825 0.8352942  0.5294118 ][0.427451   0.22352943 0.46274513 ... 0.00784314 0.30588236 0.10980393][0.3372549  0.16862746 0.17254902 ... 0.7294118  0.91372555 0.7568628 ]]

2. 标准化Normalize

用于对输入图像的归一化,包括三个参数:

        Mean  :图像每个通道的均值。

        Std      :图像每个通道的标准差。

        is_hwc:bool值,输入图像的格式。

                        True为(height, width, channel)

                        False为(channel, height, width)

图像的每个通道下列公式进行调整,其中c代表通道索引:

normalize = vision.Normalize(mean=(0.1307,), std=(0.3081,))
normalized_image = normalize(rescaled_image)
print(normalized_image)

输出:

[[ 0.8995235   2.286901    0.07218818 ...  0.5685893   1.8795974   1.5359352 ][ 0.40312228 -0.01690946  1.3831964  ... -0.38602826  0.5685893   1.3195552 ][ 1.688674    2.4396398  -0.30965886 ...  0.5304046   2.3759987   1.7777716 ]...[ 1.9941516   1.2813705   0.28856817 ...  1.7523152   2.286901   1.2940987 ][ 0.9631647   0.3012964   1.0777187  ... -0.3987565   0.5685893  -0.06782239][ 0.67041516  0.12310111  0.13582934 ...  1.9432386   2.5414658   2.0323365 ]]

3. 格式转换HWC2CHW

MindSpore设置HWC为默认图像格式

不同设备会对(height, width, channel)或(channel, height, width)两种格式针对性优化

将上例的normalized_image处理为HWC格式,转换为CHW

hwc_image = np.expand_dims(normalized_image, -1)
hwc2chw = vision.HWC2CHW()
chw_image = hwc2chw(hwc_image)
print(hwc_image.shape, chw_image.shape)

输出:

(48, 48, 1) (1, 48, 48)

五、文本变换Text Transforms

mindspore.dataset.text模块提供文本数据变换

包括分词(Tokenize)、构建词表、Token转Index等操作

示例:

1. 准备数据

定义三段文本,使用GeneratorDataset加载。

texts = ['Welcome to Beijing']
test_dataset = GeneratorDataset(texts, 'text')

2. 分词

MindSpore提供多种分词器,此处选用PythonTokenizer,可以自由实现分词策略。

用map注册分词操作。

def my_tokenizer(content):return content.split()test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))
print(next(test_dataset.create_tuple_iterator()))

输出:

[Tensor(shape=[3], dtype=String, value= ['Welcome', 'to', 'Beijing'])]

3. 词表映射变换Lookup

为每个分词建立索引

使用Vocab生成词表,用vocab方法查看词表

vocab = text.Vocab.from_dataset(test_dataset)
print(vocab.vocab())

输出:

{'to': 2, 'Welcome': 1, 'Beijing': 0}

配合map方法进行词表映射变换,为分词建立索引

test_dataset = test_dataset.map(text.Lookup(vocab))
print(next(test_dataset.create_tuple_iterator()))

输出:

[Tensor(shape=[3], dtype=Int32, value= [1, 2, 0])]

六、匿名函数变换Lambda Transforms

Lambda是匿名函数。

Lambda Transforms加载定义Lambda函数

下例的Lambda函数实现对输入数据乘2

test_dataset = GeneratorDataset([1, 2, 3], 'data', shuffle=False)
test_dataset = test_dataset.map(lambda x: x * 2)
print(list(test_dataset.create_tuple_iterator()))

输出:

[[Tensor(shape=[], dtype=Int64, value= 6)], [Tensor(shape=[], dtype=Int64, value= 18)], [Tensor(shape=[], dtype=Int64, value= 38)]]

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

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

相关文章

OLMo:真正完全开源的大模型

最近&#xff0c;又有一家机构AI2&#xff08;Allen Institute for AI&#xff09;开源了一个LLM&#xff1a;OLMo&#xff0c;它的英文全称就叫Open Language Model。相比之前开源的大模型&#xff0c;OLMo的独特之处是完全开源&#xff0c;除了训练的模型&#xff0c;OLMo还开…

vmware安装debian11

安装vmware16 下载镜像 https://repo.huaweicloud.com/debian-cd/ https://repo.huaweicloud.com/debian-cd/11.7.0/amd64/iso-dvd/ 安装 安装完成之后重启&#xff0c;输入账号密码进入&#xff0c;安装ssh服务器即可使用

记一次elementui时间线的实现

实现效果 点击展开&#xff0c;每次累加五条数据进行展示 实现思路 起始本质上就是一个分页查询&#xff0c;只不过按新的形式展示&#xff0c;然后也不统计总数&#xff0c;每次只展示固定的5条数据点击加载更多&#xff0c;就展示下一页&#xff0c;页的页数进行1&#xff…

HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”

6月21-23日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;盛大开幕。6月23日上午&#xff0c;《HarmonyOS开放能力&#xff0c;使能应用原生易用体验》分论坛成功举办&#xff0c;大会邀请了多位华为技术专家深度解读如何通过根技术、开放能力、场景化控件等亮点…

什么是中断?---STM32篇

目录 一&#xff0c;中断的概念 二&#xff0c;中断的意义 三&#xff0c;中断的优先级 四&#xff0c;中断的嵌套 如果一个高优先级的中断发生&#xff0c;它会立即打断当前正在处理的中断&#xff08;如果其优先级较低&#xff09;&#xff0c;并首先处理这个高优…

EXCEL快速填充空白内容

** EXCEL快速填充空白内容 ** 1.全选所有需要填充的内容&#xff0c;按住电脑的F5或者CTRLG点击定位 2.可以看到空白处被自动选定&#xff0c;之后按电脑和⬆&#xff0c;最后CTRLenter 可以看到空白处已经被填充。

vue uniapp MEQX JWT认证

1.下载依赖 npm install mqttimport * as mqtt from "mqtt/dist/mqtt.min" ​ 我是用的uniapp vue3 vite这里尝试了很多方式,都导入不进去后来我就采用的本地引入方式, 把mqtt.min.js下载到本地然后在index.html 中导入<script src"./MEQX/mqtt.js" typ…

对于CDA一级考试该咋准备??!

一、了解考试内容和结构 CDA一级考试主要涉及的内容包括&#xff1a;数据分析概述与职业操守、数据结构、数据库基础与数据模型、数据可视化分析与报表制作、Power BI应用、业务数据分析与报告编写等。 CDA Level Ⅰ 认证考试大纲:https://edu.cda.cn/group/4/thread/174335 …

第5章_Modbus通讯协议

文章目录 5.1 学习Modbus的快速方法5.1.1 寄存器速记5.1.2 协议速记 5.2 初识Modbus5.2.1 背景5.2.2 什么是Modbus&#xff1f;1. Modbus简介2. Modbus特点3. Modbus常用术语4. Modbus事务处理 5.3 Modbus软件与使用5.3.1 Modbus软件简介5.3.2 Modbus Poll&#xff08;主站设备…

Qt信号槽的坑

1、重载的信号&#xff08;以QSpinBox为例&#xff09; 像是点击按钮之类的信号槽很好连接&#xff0c;这是因为它的信号没有重载&#xff0c;如果像SpinBox那样有重载信号的话&#xff08;Qt5.12的见下图&#xff0c;不过Qt5.15LTS开始就不再重载而是换信号名了&#xff09;&…

Linux的fwrite函数

函数原型: 向文件fp中写入writeBuff里面的内容 int fwrite(void*buffer&#xff0c;intsize&#xff0c;intcount&#xff0c;FILE*fp) /* * description : 对已打开的流进行写入数据块 * param ‐ ptr &#xff1a;指向 数据块的指针 * param ‐ size &#xff1a;指定…

【SGX系列教程】(五)Intel-SGX 官方示例分析(SampleCode)——RemoteAttestation

文章目录 一.RemoteAttestation原理介绍1.1 远程认证原理1.2 远程认证步骤1.3 远程认证基本流程1.4 IAS通过以下步骤验证报告的签名1.5 关键术语1.6 总结二.源码分析2.1 README2.1.1 README给出的编译流程2.2 重点代码分析2.2.0 主要代码模块交互流程分析2.2.1 isv_app文件夹2.…

【MATLAB源码-第135期】基于matlab的变色龙群优化算法CSA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 变色龙群优化算法&#xff08;Chameleon Swarm Algorithm&#xff0c;CSA&#xff09;是一种新颖的群体智能优化算法&#xff0c;受到自然界中变色龙捕食和社交行为的启发。变色龙以其独特的适应能力而著称&#xff0c;能够根…

SpringBoot 搭建sftp服务 实现远程上传和下载文件

maven依赖&#xff1a; <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>application.yml sftp:protocol: sftphost: port: 22username: rootpassword: sp…

使用API有效率地管理Dynadot域名,为文件夹中的域名进行域名停放

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

七人团购新风尚:数字化时代的购物革命

在数字化时代的浪潮中&#xff0c;购物方式正经历着前所未有的变革。其中&#xff0c;七人团购模式以其独特的互动性和价值共享理念&#xff0c;为消费者带来了全新的购物体验。下面&#xff0c;我们将深入探讨这一模式的运作机制&#xff0c;以及它如何为标价599元的热销商品创…

Python 面试【初级】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【算法训练记录——Day36】

Day36——贪心Ⅳ 1.leetcode_452用最少数量的箭引爆气球2.leetcode_435无重叠区间3.leetcode_763划分字母区间4.leetcode_ 1.leetcode_452用最少数量的箭引爆气球 思路&#xff1a;看了眼题解&#xff0c;局部最优&#xff1a;当气球出现重叠&#xff0c;一起射&#xff0c;所用…

快速了解GPT-4o和GPT-4区别

GPT-4o简介 在5月14日的OpenAI举行春季发布会上&#xff0c;OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、图像及语…

Tesseract Python 图片文字识别入门

1、安装tesseract Index of /tesseract https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.3.0.20221214.exe 2、安装中文语言包 https://digi.bib.uni-mannheim.de/tesseract/tessdata_fast/ 拷贝到C:\Program Files\Tesseract-OCR\tessdata 3、注…