昇思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')

        运行截图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

乐队谱在哪里找 乐队功能谱怎么做 Guitar Pro8激活码 吉他谱软件

学习乐队谱对于音乐爱好者来说是一种极具乐趣和挑战的体验。无论是追溯经典曲目还是与其他乐手合作,乐队谱都是实现音乐梦想的必备工具。然而,要找到适合练习的乐队谱并制作出符合乐队演奏需求的功能谱并不容易,需要借助一些方法和工具。下面…

自然语言处理-BERT处理框架-transformer

目录 1.介绍 2.Transformer 2.1 引言 2.2 传统RNN网络的问题 2.3 整体架构 2.4 Attention 2.5 Self-Attention如何计算 3.multi-headed机制 4. BERT训练方法 1.介绍 BERT:当前主流的解决框架,一站式搞定NLP任务。(解决一个NLP任务时的考虑…

电脑维护百科全书:从硬件到软件的全面保养指南

前言 在信息时代的滔滔江河中,个人电脑已悄然成为我们学习与工作中不可或缺的智识灯塔。然而,维持其卓越性能与延长使用寿命,绝非偶然,而是建立在细致入微的维护基础之上。本指南犹如一张详尽的航海图,引领你深入探索…

UE5的引擎初始化流程

UE5的引擎初始化流程 首先跟着UE的官方文档[1]获取到UE的源代码,然后在参考GitHub上repo的readme,将UE引擎从源码build出来。以Windows平台为例,先找到引擎的入口函数: int32 WINAPI WinMain(_In_ HINSTANCE hInInstance, _In_op…

wavesummit2024发布飞桨3.0版本

今天网上看了wavesummit2024深度学习开发者大会,本来没有啥期待,结果发现飞桨竟然发布3.0版本了! 以下是飞桨框架 3.x 的新特性: 动静统一自动并行: 为了降低大模型的编程难度,飞桨还优化了动静统一的半自动并行编程范…

【Matlab】-- 飞蛾扑火优化算法

文章目录 文章目录 01 飞蛾扑火算法介绍02 飞蛾扑火算法伪代码03 基于Matlab的部分飞蛾扑火MFO算法04 参考文献 01 飞蛾扑火算法介绍 飞蛾扑火算法(Moth-Flame Optimization,MFO)是一种基于自然界飞蛾行为的群体智能优化算法。该算法由 Sey…

掌握Scrum:敏捷开发中的短期迭代与定期会议

目录 前言1. Scrum概述1.1 什么是Scrum1.2 Scrum的三大支柱 2. 短期迭代(Sprint)2.1 Sprint规划2.1.1 确定Sprint目标2.1.2 创建Sprint待办列表 2.2 Sprint执行2.2.1 每日站会 2.3 Sprint回顾2.3.1 Sprint评审2.3.2 Sprint回顾 3. 定期会议3.1 产品待办列…

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含…

详细介绍LP-SCADA系统的核心数据采集单元

关键字:LP-SCADA系统, 传感器可视化, 设备可视化, 独立SPC系统, 智能仪表系统,SPC可视化,独立SPC系统 SCADA系统的数据采集功能是其核心组成部分,它允许系统从各种传感器、仪器和设备中收集实时数据。以下是SCADA系统数据采集功能的详细描述: 传感器和…

nginx添加模块

问题描述:已经在运行的宝塔中的nginx如何添加模块 1. 进入宝塔nginx的脚本目录 cd /www/server/panel/install 2. 读修改宝塔官方写的脚本 vim nginx.sh 3. 找到字符 ./configure - 添加模块 --add-module/home/root/app/nginx-module/echo-nginx-module-0.62 …

代码随想录算法训练营第三十七天|01背包问题、分割等和子集

01背包问题 题目链接:46. 携带研究材料 文档讲解:代码随想录 状态:忘了 二维dp 问题1:为啥会想到i代表第几个物品,j代表容量变化? 动态规划中,每次决策都依赖于前一个状态的结果,在…

构造函数的小白理解

一、实例 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;//定义一个名为Question的类,用于存储问题及相关信息 [Serializable] public class Question {public string questionText;//存储题目文本字段public str…

安利一款AI驱动的可视化大屏产品,支持一键导出源码

数据可视化作为一种直观呈现信息的方式,在各个领域都具有关键作用,能够帮助我们更好地理解和分析数据。今天和大家分享一款我体验了很久的可视化大屏制作工具——山河鉴数据可视化源码工具。 我们使用它可以轻松通过拖拽式来搭建可视化大屏,并…

React 中 useEffect

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

日元一路暴跌,对日股是利好还是利空? “年中高息”效应不再,货基与回购收益率走低

日元汇率自5月突破155后,股市已开始认识到日元疲软的负面影响,日元贬值与股价上涨的相关性已被打破,股市投资者现在需要关注日元贬值的水平。 6月28日周五,美国重磅PCE物价指数公布前夕,日元再度深跌至1美元兑161日元&…

【漏洞复现】Atlassian Confluence RCE(CVE-2023-22527)

产品简介 Atlassian Confluence 是一款由Atlassian开发的企业团队协作和知识管理软件,提供了一个集中化的平台,用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 …

渗透测试入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

什么是渗透测试 渗透测试就是模拟真实黑客的攻击手法对目标网站或主机进行全面的安全评估,与黑客攻击不一样的是,渗透测试的目的是尽可能多地发现安全漏洞,而真实黑客攻击只要发现一处入侵点即可以进入目标系统。 一名优秀的渗透测试工程师…

BigInteger 和 BigDecimal(java)

文章目录 BigInteger(大整数)常用构造方法常用方法 BigDecimal(大浮点数)常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数) java.math.BigInteger。 父类:Number 常用构造方法 构造方法:BigIntege…

新书速览|解密AI绘画与修图: Stable Diffusion+Photoshop

《解密AI绘画与修图: Stable DiffusionPhotoshop》 本书内容 《解密AI绘画与修图:Stable DiffusionPhotoshop》全面介绍了Photoshop和Stable Diffusion的交互方式,以及各自的AI功能和具体使用方法。除了讲解功能,还通过实际案例加…

【PyQt】20-动态显示时间(QTimer)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实现方式: 一、QTimer 二、QThread 多线程:同时完成多个任务。 定时器就是每隔一段时间调用一次。 二、动态时…