昇思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 是…

ES 修改索引字段类型

大体的原理&#xff1a; 1&#xff1a;按照老索引按需修改&#xff0c;新建新索引 2&#xff1a;转移数据&#xff08;数据量大&#xff0c;时间会很长&#xff09; 3&#xff1a;删除老索引 4&#xff1a;给新索引 创建别名 第一步&#xff1a;创建新索引 可以先获取老索引ma…

【大数据开发语言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;内置丰富的后台…

Go语言测试第二弹——基准测试

在前一篇文章中&#xff0c;我们讲解了Go语言中最基础的单元测试&#xff0c;还没有看过的可以自行去查看&#xff0c;这篇文章我们详细了解Go语言里面的基准测试。 基准测试 基准测试&#xff0c;也就是BenchmarkTest&#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; 三.线程创建的多种…

【Android面试八股文】请描诉Activity的启动流程,从点击图标开始。

当用户点击应用程序图标启动一个 Activity 时,涉及的整个流程可以梳理如下: 1. 用户点击应用程序图标 用户在设备的主屏幕或应用列表中点击应用程序图标,触发应用程序启动事件。 2. 系统接收启动请求 Intent 解析: 系统接收到用户点击事件后,会创建一个包含目标 Activi…

在实施数据加密时,有哪些常见的加密技术可供选择?

在实施数据加密时&#xff0c;有哪些常见的加密技术可供选择&#xff1f; 在实施数据加密时&#xff0c;有许多常见的加密技术可供选择&#xff0c;这些技术根据其原理、安全性、效率和适用场景有所不同。以下是一些常见的加密技术&#xff1a; 对称加密&#xff08;Symmetri…

Nuxtjs3教程

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

C# enum Enumeration Type 枚举

定义枚举使用枚举访问枚举值枚举与switch语句枚举特性枚举与位字段总结 在 C#中&#xff0c; enum 是一种特殊的值类型&#xff0c;它允许你为一组相关的常量定义一个名称。枚举提供了一种将一组整数值与更易读的名称关联起来的方法。 定义枚举 你可以使用 enum 关键字来定义…

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;可以节省大量的开发时间。 这…

网页摘要生成算法的一点探索

网页摘要生成算法是一个复杂的过程&#xff0c;涉及多个步骤和不同的技术。以下是一个基于参考文章信息的清晰回答&#xff0c;对网页摘要生成算法进行了分点表示和归纳&#xff1a; 1. 算法概述 网页摘要生成算法的主要目标是自动从网页内容中提取关键信息&#xff0c;并生成简…

【第8章】MyBatis-Plus持久层接口之ActiveRecord

文章目录 前言一、使用步骤1. 继承 Model 类2. 调用 CRUD 方法 二、使用提示总结 前言 ActiveRecord 模式是一种设计模式&#xff0c;它允许实体类直接与数据库进行交互&#xff0c;实体类既是领域模型又是数据访问对象。在 Mybatis-Plus 中&#xff0c;实体类只需继承 Model …