昇思25天学习打卡营第4天|常见的数据变换 Transforms类型

news2024/7/6 18:54:47

导入数据集相关库和模块


        首先导入了一些必要的库和模块,包括 numpy(np 是其常用的别名)、PIL 库中的 Image 模块,以及自定义的 download 模块,还有 mindspore.dataset 中的 transforms、vision、text 模块。然后使用 mindspore.dataset 中的 GeneratorDataset 和 MnistDataset 。这通常是为了后续处理和操作数据集做准备。

        代码如下:

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


        Compose接收一个数据增强操作序列,然后将其组合成单个数据增强操作。我们仍基于Mnist数据集呈现Transforms的应用效果。

        代码如下:

# Download data from open datasets  
url = "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')  

        分析:首先定义了一个下载数据的网址 url 。然后调用 download 函数从给定的网址下载数据,并将其保存到当前目录下("./"),文件类型为 zip ,如果已存在则进行替换。最后使用 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)  

        分析:首先,从训练数据集 train_dataset 中获取下一个样本,并将图像数据和标签分别赋值给 image 和 label ,然后打印出图像数据的形状。接着,定义了一个数据变换的组合 composed ,其中包含了三个数据变换操作:将像素值缩放到 0 到 1 之间、进行标准化、将图像的通道顺序从 HWC 转换为 CHW 。然后,使用 map 方法将这个组合变换应用到训练数据集的 image 列。最后,再次从经过变换的训练数据集中获取下一个样本,并将图像数据和标签分别赋值给 image 和 label ,然后再次打印出图像数据的形状,以查看变换后的效果。

        运行结果:

        (28, 28, 1)

        (1, 28, 28)

Vision Transforms


Rescale

        代码如下:

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

        分析:首先使用 np.random.randint 函数生成一个取值范围在 0 到 255 之间、形状为 (48, 48) 且数据类型为 np.uint8 的随机整数数组 random_np 。然后通过 Image.fromarray 函数将这个随机数组转换为 Image 对象 random_image 。最后打印出 random_np 数组。

        运行结果:

[[ 82 253  82 ... 150 245  93]

 [ 66 174  93 ...  67 180  23]

 [106 232 100 ... 224  10  48]

 ...

 [ 37 201 109 ...   7  22 109]

 [153 232  12 ...  67 131  36]

 [231 127  37 ...  15 163  71]]

        代码如下:

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

        分析:Rescale变换用于调整图像像素值的大小,包括两个参数:rescale:缩放因子。shift:平移因子。

        运行结果:

        [[0.32156864 0.9921569  0.32156864 ... 0.5882353  0.9607844  0.3647059 ]

         [0.25882354 0.68235296 0.3647059  ... 0.2627451  0.7058824  0.09019608]

         [0.4156863  0.909804   0.3921569  ... 0.87843144 0.03921569 0.18823531]

         ...

         [0.14509805 0.78823537 0.427451   ... 0.02745098 0.08627451 0.427451  ]

         [0.6        0.909804   0.04705883 ... 0.2627451  0.5137255  0.14117648]

         [0.9058824  0.49803925 0.14509805 ... 0.05882353 0.6392157  0.2784314 ]]

Normalize

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

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

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

        is_hwc:bool值,输入图像的格式。True为(height, width, channel),False为(channel, height, width)。

        代码如下:

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

        分析:首先创建了一个名为 normalize 的标准化变换对象,其均值为 (0.1307,) ,标准差为 (0.3081,) 。然后将经过缩放处理的图像 rescaled_image 应用这个标准化变换,得到标准化后的图像 normalized_image 。最后打印出标准化后的图像。

        运行结果:

        [[ 0.61950225  2.7960305   0.61950225 ...  1.4850222   2.6942046

           0.7595128 ]

         [ 0.41585052  1.7904998   0.7595128  ...  0.42857873  1.8668692

          -0.13146357]

         [ 0.92498     2.5287375   0.8486106  ...  2.4269116  -0.29693064

           0.18674232]

         ...

         [ 0.04673171  2.1341622   0.9631647  ... -0.33511534 -0.14419182

           0.9631647 ]

         [ 1.523207    2.5287375  -0.27147415 ...  0.42857873  1.2431858

           0.03400347]

         [ 2.5160093   1.1922729   0.04673171 ... -0.23328944  1.6504892

           0.47949168]]

HWC2CHW

        HWC2CHW变换用于转换图像格式。在不同的硬件设备中可能会对(height, width, channel)或(channel, height, width)两种不同格式有针对性优化。MindSpore设置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) 

        分析:在 Python 中,利用 NumPy 库和一些图像处理相关操作来处理图像数据。这段代码借助 NumPy 的 expand_dims 函数,在 normalized_image 的最后一个维度添加了一个新维度。接着创建了一个叫做 hwc2chw 的对象,它是用于实现图像维度转换的。然后使用先前创建的这个对象对 hwc_image 进行转换,从而得到 chw_image 。最后打印出 hwc_image 和 chw_image 的形状。形状一般是以元组的形式呈现,其中包含了每个维度的尺寸大小。通过打印形状,能够清楚地知晓图像在处理前后维度上的变化状况。

        运行结果:

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

Text Transforms


PythonTokenizer

        代码如下:

texts = ['Welcome to Beijing']  
test_dataset = GeneratorDataset(texts, 'text')  
def my_tokenizer(content):  
    return content.split()  
test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))  
print(next(test_dataset.create_tuple_iterator()))  

        分析:首先定义了一个名为 texts 的列表,其中包含一个字符串 'Welcome to Beijing' 。

        然后创建了一个名为 test_dataset 的数据集,数据来源于 texts 列表,并且数据的类别被标记为 'text' 。

        接下来定义了一个名为 my_tokenizer 的函数,它的作用是将输入的内容按照空格分割成单词。之后,test_dataset 数据集通过 map 方法应用 my_tokenizer 函数进行处理,即将每个文本数据按照函数的规则进行分割。

        最后,通过 next(test_dataset.create_tuple_iterator()) 打印出处理后的数据集的第一个元素。

        运行结果:

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

Lookup

        代码如下:

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

        运行结果:

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

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

Lambda Transforms


        代码如下:

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()))  
def func(x):  
    return x * x + 2  
test_dataset = test_dataset.map(lambda x: func(x))  
print(list(test_dataset.create_tuple_iterator()))

        分析:

        首先创建了一个名为 test_dataset 的数据集,数据是列表 [1, 2, 3] ,数据类别标记为 'data' ,并且设置不打乱数据顺序。

        然后对 test_dataset 中的每个元素进行映射操作,即将每个元素乘以 2 。

        接着打印出经过第一次映射处理后的数据集元素,通过将迭代器转换为列表并打印出来。

        之后定义了一个名为 func 的函数,用于计算输入值的平方加 2 。

        然后再次对 test_dataset 进行映射操作,这次使用 func 函数对每个元素进行处理。

        最后再次打印出经过第二次映射处理后的数据集元素,同样通过将迭代器转换为列表并打印出来。

        运行结果:

        [[Tensor(shape=[], dtype=Int64, value= 2)], [Tensor(shape=[], dtype=Int64, value= 4)],         [Tensor(shape=[], dtype=Int64, value= 6)]]

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

        打印时间:

import time
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),'qianduanjidi')

        运行截图:

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

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

相关文章

在预训练语言模型主流架构

文章目录 编码器-解码器架构因果解码器架构前缀解码器架构在预训练语言模型时代,自然语言处理领域广泛采用了预训练 + 微调的范式,并诞生了以 BERT 为代表的编码器(Encoder-only)架构、以 GPT 为代表的解码器(Decoder-only)架构和以 T5 为代表的编码器-解码器(Encoder-d…

springcloud-config服务器,同样的配置在linux环境下不生效

原本在windows下能争取的获取远程配置但是部署到linux上死活都没有内容,然后开始了远程调试,这里顺带讲解下获取配置文件如果使用的是Git源,config service是如何响应接口并返回配置信息的。先说问题,我的服务名原本是abc-abc-abc…

React 中 useEffect

React 中 useEffect 是副作用函数,副作用函数通常是处理外围系统交互的逻辑。那么 useEffect 是怎处理的呢?React 组件都是纯函数,需要将副作用的逻辑通过副作用函数抽离出去,也就是副作用函数是不影响函数组件的返回值的。例如&a…

stthjpv:一款针对JWT Payload的安全保护工具

关于stthjpv stthjpv是一款针对JWT Payload的安全保护工具,这款工具集多种技术和思想于一身,可以通过不断改变相关参数值来防止Payload被解码,以帮助广大研究人员更好地保护JWT Payload的安全性。 除此之外,该工具还能够确保JWT …

外贸业务员如何克服打电话恐惧?

更多外贸干货及开发客户的方法,尽在微信【千千外贸干货】 每个人都曾经历过从零开始的阶段。在我们决定要做外贸销售的那一刻起,便意识到沟通的重要性。许多朋友提到,通常通过邮件开发客户,或者在B2B平台上回复客户的询盘。但真的…

技术干货丨如何加速工业数字孪生应用落地?

什么是数字孪生? “孪生”概念最早可追溯至NASA的阿波罗项目,随着数字化技术的进步,“孪生”概念应用从物理孪生向数字孪生发展。即“数字孪生”是对资产、进程或系统的一种数字化表示,并通过信息交互、数据同步等方式实现物理实体…

云计算【第一阶段(23)】Linux系统安全及应用

一、账号安全控制 1.1、账号安全基本措施 1.1.1、系统账号清理 将非登录用户的shell设为/sbin/nologin锁定长期不使用的账号删除无用的账号 1.1.1.1、实验1 用于匹配以/sbin/nologin结尾的字符串,$ 表示行的末尾。 (一般是程序用户改为nologin&…

【Matlab 六自由度机器人】机器人动力学之推导拉格朗日方程(附MATLAB机器人动力学拉格朗日方程推导代码)

【Matlab 六自由度机器人】机器人动力学概述 近期更新前言正文一、拉格朗日方程的推导1. 单自由度系统2. 单连杆机械臂系统3. 双连杆机械臂系统 二、MATLAB实例推导1. 机器人模型的建立2. 动力学代码 总结参考文献 近期更新 【汇总】 【Matlab 六自由度机器人】系列文章汇总 …

原码、反码、补码、移码的计算转换

文章目录 正数负数原码 & 反码反码 -> 补码原码 <-> 补码移码 <- Other 方法总结练习 正数 原码 和 反码 和 补码 都是一样的不会发生变化 因此&#xff0c;计算的时候先看第一位 符号位 &#xff0c;只要能发现是正数&#xff0c;三者都不变 移码 在补码基础…

DataV大屏组件库

DataV官方文档 DataV组件库基于Vue &#xff08;React版 (opens new window)&#xff09; &#xff0c;主要用于构建大屏&#xff08;全屏&#xff09;数据展示页面即数据可视化&#xff0c;具有多种类型组件可供使用&#xff1a; 源码下载

Web渗透-逻辑漏洞

一、概述 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂&#xff0c;导致一些逻辑分支不能够正常处理或处理错误&#xff0c;一般出现任意密码修改&#xff08;没有旧密码验证&#xff09;,越权访问&#xff0c;密码找回&#xff0c;交易支付金额等。对常见的漏洞进行过统计&…

蒙特卡洛法求定积分方

对于连续函数密度函数&#xff0c;求某一个区间的概率时&#xff0c;理论上通过积分获取&#xff0c; 以求曲线围成的面积为例 当我们在[a,b]之间随机取一点x时&#xff0c;它对应的函数值就是f(x)。接下来我们就可以用f(x)*(b-a)来粗略估计曲线下方的面积&#xff0c;也就是我…

探索区块链:颠覆性技术的崛起

目录 一、引言 二、区块链技术概述 三、区块链应用场景 四、区块链面临的挑战 五、区块链的未来展望 六、结语 一、引言 在数字化浪潮的推动下&#xff0c;区块链技术以其独特的去中心化、透明性和不可篡改性等特性&#xff0c;正在逐步改变我们的生活。从金融领域到供应…

最新Node.js安装及配置详细教程

文章目录 下载Node.js安装Node.js配置Node.js1、修改npm包的全局安装路径和缓存路径2、环境变量设置3、镜像源配置4、安装其他包管理工具 下载Node.js 下载&#xff1a;https://nodejs.org/en/download/prebuilt-installer&#xff0c;下载LTS版本的&#xff0c;LTS(Long Time…

最小生成树拓展应用

文章目录 最小生成树拓展应用理论基础 题单1. [新的开始](https://www.acwing.com/problem/content/1148/)2. [北极通讯网络](https://www.acwing.com/problem/content/1147/)3. [走廊泼水节](https://www.acwing.com/problem/content/348/)4. [秘密的牛奶运输](https://www.ac…

001 SpringMVC介绍

文章目录 基础概念介绍BS和CS开发架构应用系统三层架构MVC设计模式 SpringMVC介绍SpringMVC是什么SpringMVC与Spring的联系为什么要学习SpringMVC 六大组件介绍六大组件(MVC组件其他三大组件)说明 基础概念介绍 BS和CS开发架构 一种是C/S架构&#xff0c;也就是客户端/服务器…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【15】异步_线程池

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【15】异步_线程池 初始化线程的 4 种方式开发中为什么使用线程池线程池七大参数线程池工作原理常见的 4 种线程池生产中如何使用线程池&#xff1f;CompletableFuture 异步编排—简介业务…

dataX同步SQLserver到MySQL数据

引用datax官方描述&#xff1a; DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS…

如何利用“AI交互数字人+展厅”拓展文娱消费空间?

打造新生代潮玩聚集地&#xff0c;打造演艺新空间&#xff0c;促进虚拟现实体验等文娱业态场景创新&#xff0c;成为了当下发展文旅消费新场景的一大重要手段。数字人汇集了虚拟现实、增强现实、全息投影、人工智能、实时传输语音合成等数字技术&#xff0c;可以利用数字人重构…

在等保2.0的合规性审查中,常见的难点和误区有哪些?

在等保2.0&#xff08;即《信息安全技术 网络安全等级保护基本要求》GB/T 22239-2019&#xff09;的合规性审查中&#xff0c;企业和机构经常会遇到一些难点和误区&#xff0c;主要包括以下几个方面&#xff1a; 常见误区 1. “三同步”不同步&#xff1a;等保2.0强调“同步规…