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

导入数据集相关库和模块


        首先导入了一些必要的库和模块,包括 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.mzph.cn/diannao/37214.shtml

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

相关文章

数字信号处理实验三(IIR数字滤波器设计)

IIR数字滤波器设计(2学时) 要求: 产生一复合信号序列,该序列包含幅度相同的28Hz、50Hz、100Hz、150Hz的单音(单频)信号;其中,50Hz及其谐波为工频干扰(注:采样…

2024年6月27日,欧盟REACH法规新增第31批1项SVHC高关注物质

ECHA公布第31批1项SVHC,物质已增至241项 2024年6月27日,ECHA公布第31批1项SVHC,总数达241项。新增物质未包括磷酸三苯酯,仍在评议中。REACH法规要求SVHC含量超0.1%需告知下游,出口超1吨须通报ECHA。SCIP通报要求SVHC含…

MySQL84 -- ERROR 1524 (HY000): Plugin ‘msql_native_password‘ is not loaded.

【问题描述】 MySQL 8.4版本,配置用户使用mysql_native_password认证插件验证用户身份,报错: 【解决方法】(Windows, MySQL 8.4) 1、修改MySQL配置文件my.ini,在[mysqld]段添加mysql_native_passwordON。 2、管理员…

uni-app 自定义支付密码键盘

1.新建最贱 payKeyboard .vue <template><view class"page-total" v-show"isShow"><view class"key-list"><view class"list" v-for"(item,index) in keyList" :class"{special:item.keyCode190…

JavaScript:实现内容显示隐藏(展开收起)功能

一、场景 点击按钮将部分内容隐藏&#xff08;收起&#xff09;&#xff0c;再点击按钮时将内容显示&#xff08;展开&#xff09;出来。 二、技术摘要 js实现实现内容显示隐藏js动态给ul标签添加li标签js遍历数组 三、效果图 四、代码 js_block_none.js代码 var group1 doc…

网工内推 | 网络工程师,IE认证优先,最高18k*14薪,周末双休

01 上海吾索信息科技有限公司 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;岗位职责&#xff1a; 1&#xff09;具备网络系统运维服务经验以及数据库实施经验&#xff0c;具备网络系统认证相关资质或证书&#xff1b; 2&#xff09;掌握常用各设备的运维巡检…

Java---Maven详解

一段新的启程&#xff0c; 披荆斩棘而前&#xff0c; 心中的梦想&#xff0c; 照亮每个黑暗的瞬间。 无论风雨多大&#xff0c; 我们都将坚强&#xff0c; 因为希望的火焰&#xff0c; 在胸中永不熄灭。 成功不是终点&#xff0c; 而是每一步的脚印&#xff0c; 用汗水浇灌&…

uni-appx使用form表单页面初始化报错

因为UniFormSubmitEvent的类型时 e-->detail-->value,然后没有了具体值。所以页面初始化的时候 不能直接从value取值&#xff0c;会报错找不到 所以form表单里的数据我们要设置成一个对象来存放 这个问题的关键在于第22行代码 取值&#xff1a; 不能按照点的方式取值 …

[数据集][目标检测]棉花叶子害虫检测数据集VOC+YOLO格式595张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;595 标注数量(xml文件个数)&#xff1a;595 标注数量(txt文件个数)&#xff1a;595 标注类别…

找不到xinput1_3.dll怎么办,实测有效的几种方法分享

在日的使用电脑过程中&#xff0c;我们经常会遇到各种各样的问题。其中之一就是找不到xinput1_3.dll文件。这个问题可能会影响到我们的游戏体验&#xff0c;甚至导致电脑无法正常运行。那么&#xff0c;又该如何解决这个问题呢&#xff1f;小编将全面解析找不到xinput1_3.dll对…

老无忧,成熟人士都在玩的社交app

随着互联网向不同年龄群体的进一步渗透&#xff0c;越来越多大龄人士逐步在传统以年轻人为主的平台中搭建起自己的空间&#xff0c;对缔结社交关系的需求也变得强烈起来。老无忧无忧交友app应运而生&#xff0c;于2024年6月1日正式上线&#xff08;以下简称“老无忧”&#xff…

基于Java仓储出入库管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

GPU算力是什么,哪些行业需要用到GPU算力?

近两年&#xff0c;计算能力已成为推动各行各业发展的关键因素。而GPU&#xff08;图形处理器&#xff09;算力&#xff0c;作为现代计算技术的重要分支&#xff0c;正逐渐在多个领域展现出其强大的潜力和价值。尚云将简要介绍GPU算力的定义和基本原理&#xff0c;并探讨其在哪…

使用minio搭建oss

文章目录 1.minio安装1.拉取镜像2.启动容器3.开启端口1.9090端口2.9000端口 4.访问1.网址http://:9090/ 5.创建一个桶 2.minio文件服务基本环境搭建1.创建一个文件模块2.目录结构3.配置依赖3.application.yml 配置4.编写配置类MinioConfig.java&#xff0c;构建minioClient5.Fi…

Verilog进行结构描述(四):Verilog逻辑强度(strength)模型

目录 1.Verilog提供多级逻辑强度。2.基本单元强度说明语法3.信号强度值系统4.Verilog多种强度决断 微信公众号获取更多FPGA相关源码&#xff1a; 1.Verilog提供多级逻辑强度。 逻辑强度模型决定信号组合值是可知还是未知的&#xff0c;以更精确的描述硬件的行为。下面这些情…

数学建模---最小生成树问题的建模~~~~~Matlab代码

目录 1.相关概念 &#xff08;1&#xff09;什么是树 &#xff08;2&#xff09;生成树和最小生成树&#xff1a; 2.适用赛题 &#xff08;1&#xff09;赛题分类 &#xff08;2&#xff09;不同之处 3.两种算法 &#xff08;1&#xff09;prim算法 &#xff08;2&…

Linux高级编程——线程

pthread 线程 概念 &#xff1a;线程是轻量级进程&#xff0c;一般是一个进程中的多个任务。 进程是系统中最小的资源分配单位. 线程是系统中最小的执行单位。 优点&#xff1a; 比多进程节省资源&#xff0c;可以共享变量 进程会占用&am…

Qt creator实现一个简单计算器

目录 1 界面设计 2 思路简介 3 代码 目录 1 界面设计 ​2 思路简介 3 代码 3.1 widget.h 3.2 widget.c 4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作&#xff0c;能实现简单的计算器功能。 1 界…

Hadoop版本演变、分布式集群搭建

Hadoop版本演变历史 Hadoop发行版非常的多&#xff0c;有华为发行版、Intel发行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP)&#xff0c;这些发行版都是基于Apache Hadoop衍生出来的。 目前Hadoop经历了三个大的版本。 hadoop1.x&#xff1a;HDFSMapReduce hadoop2.x…

uniapp开发企业微信内部应用

最近一直忙着开发项目&#xff0c;终于1.0版本开发完成&#xff0c;抽时间自己总结下在项目开发中遇到的技术点。此次项目属于自研产品&#xff0c;公司扩展业务&#xff0c;需要在企业微信中开发内部应用。因为工作中使用的是钉钉&#xff0c;很少使用企业微信&#xff0c;对于…