昇思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.mzph.cn/pingmian/37779.shtml

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

相关文章

下一代的JDK - GraalVM

GraalVM是最近几年Java相关的新技术领域不多的亮点之一&#xff0c; 被称之为革命性的下一代JDK&#xff0c;那么它究竟有什么神奇之处&#xff0c;又为当前的Java开发带来了一些什么样的改变呢&#xff0c;让我们来详细了解下 下一代的JDK 官网对GraalVM的介绍是 “GraalVM 是…

【大数据开发语言Scala的入门教程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Python现在可以在线编程了!

你好&#xff0c;我是郭震 1 在线编程 在线编程好处&#xff1a; 1 无需安装和配置环境: 在线编程平台不需要用户在本地安装任何软件或配置开发环境。这对初学者和那些希望快速上手进行编程的人非常有利。 2 跨平台兼容性: 这些平台可以在任何具有互联网连接的设备上使用&#…

Flutter循序渐进==>Dart之类型、控制流和循环

导言 磨刀不误砍柴工&#xff0c;想搞好Flutter&#xff0c;先学好Flutter&#xff0c;还是本着我学Python的方法&#xff0c;先从数据类型、控制流和循环开始&#xff0c;这是每一种编程语言必用的。编程语言是相通的&#xff0c;基本精通一种后&#xff0c;学其它的就变得很…

捡到AI系统,金曲创作全靠玩

前言 毫无疑问,AI的发展已经在音乐领域带来了诸多变化和影响.但人类创作仍然具有不可替代的重要性。人类的灵感、创造力以及对音乐的深刻理解和情感表达是音乐产业的核心动力来源。AI 更倾向于被视为一种辅助工具&#xff0c;与人类创作者相互协作和融合&#xff0c;共同推动音…

laravel Dcat Admin 入门应用(七)列copyable和自定义copy

laravel Dcat Admin 入门应用&#xff08;七&#xff09;列copyable和自定义copy Dcat Admin 是一个基于 Laravel-admin 二次开发而成的后台构建工具&#xff0c;只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成 CURD 代码&#xff0c;内置丰富的后台…

【机器学习300问】136、C4.5虽然改善了ID3决策树算法的部分缺点,但还是有不足,请问还有更好的算法吗?CART算法构建决策树

一、C4.5算法仍存在的不足 &#xff08;1&#xff09;计算效率不高 C4.5使用的信息增益率计算涉及熵的对数计算&#xff0c;特别是当属性值数量大时&#xff0c;计算成本较高。 &#xff08;2&#xff09;处理连续数值属性不够高效 ID3算法只能处理离散属性&#xff0c;需要预…

kafka学习笔记08

Springboot项目整合spring-kafka依赖包配置 有这种方式&#xff0c;就是可以是把之前test里的配置在这写上&#xff0c;用Bean注解上。 现在来介绍第二种方式&#xff1a; 1.添加kafka依赖&#xff1a; 2.添加kafka配置方式: 编写代码发送消息&#xff1a; 测试&#xff1a; …

c++11、14多线程从原理到线程池

c11、14多线程从原理到线程池 一.初识二.std::thread对象生命周期和线程等待与分离1.主线程不退出&#xff0c;thread对象被销毁&#xff0c;子线程仍然在运行。2.主线程阻塞&#xff0c;等待子线程退出3.子线程与主线程分离&#xff08;守护线程&#xff09; 三.线程创建的多种…

Nuxtjs3教程

起步 官方文档 官方目录结构 安装 npx nuxi@latest init <project-name>后面跟着提示走就行 最后yarn run dev 启动项目访问localhost:3000即可 路由组件 app.vue为项目根组件 <nuxt-page />为路由显示入口 将app.vue更改内容如下 <template><d…

C语言的数据结构:树与二叉树(哈夫曼树篇)

前言 上篇讲完了二叉树&#xff0c;二叉树的查找性能要比树好很多&#xff0c;如平衡二叉树保证左右两边节点层级相差不会大于1&#xff0c;其查找的时间复杂度仅为 l o g 2 n log_2n log2​n&#xff0c;在两边层级相同时&#xff0c;其查找速度接近于二分查找。1w条数据&am…

什么是中断?---STM32篇

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

uniapp+php开发的全开源多端微商城完整系统源码.

uniappphp开发的全开源多端微商城完整系统源码. 全开源的基础商城销售功能的开源微商城。前端基于 uni-app&#xff0c;一端发布多端通用。 目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 采用该资源包做商城项目&#xff0c;可以节省大量的开发时间。 这…

周边美食小程序系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;美食店铺管理&#xff0c;菜品分类管理&#xff0c;标签管理&#xff0c;菜品信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;美食店铺&#…

基于SSM+Jsp的疫情居家办公OA系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

20-OWASP top10--XXS跨站脚本攻击

目录 什么是xxs&#xff1f; XSS漏洞出现的原因 XSS分类 反射型XSS 储存型XSS DOM型 XSS XSS漏洞复现 XSS的危害或能做什么&#xff1f; 劫持用户cookie 钓鱼登录 XSS获取键盘记录 同源策略 &#xff08;1&#xff09;什么是跨域 &#xff08;2&#xff09;同源策略…

容易涨粉的视频素材有哪些?容易涨粉的爆款短素材库网站分享

如何挑选社交媒体视频素材&#xff1a;顶级视频库推荐 在社交媒体上脱颖而出&#xff0c;视频素材的选择至关重要。以下是一些顶级的视频素材网站推荐&#xff0c;不仅可以提升视频质量&#xff0c;还能帮助你吸引更多粉丝。 蛙学网&#xff1a;创意的源泉 作为创意和独特性的…

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud&#xff0c; 归档的…

【王佩丰 Excel 基础教程】第一讲:认识Excel

文章目录 前言一、Excel软件简介1.1、历史上的其他数据处理软件与 Microsoft Excel1.2、Microsoft Excel 能做些什么1.3、Excel 界面介绍 二、Microsoft Excel 的一些重要概念2.1、Microsoft Excel 的几种常见文件类型2.2、工作簿、工作表、单元格. 三、使用小工具&#xff1a;…

Python_Socket

Python Socket socket 是通讯中的一种方式&#xff0c;主要用来处理客户端与伺服器端之串连&#xff0c;只需要protocol、IP、Port三项目即可进行网路串连。 Python套件 import socketsocket 常用函式 socket.socket([family], [type] , [proto] ) family: 串接的类型可分为…