《昇思25天学习打卡营第4天|数据变换 Transforms》

1、前言

在机器学习和深度学习中,数据预处理是一个非常重要的步骤。通过数据变换(Transforms),我们可以对原始数据进行预处理,使其适合送入神经网络进行训练。MindSpore 提供了多种类型的数据变换,能够处理图像、文本、音频等不同类型的数据。这些变换可以通过 map 方法传入,实现对指定数据列的处理。

mindspore.dataset 提供了一系列通用的、面向图像和文本的 Transforms,同时也支持使用 Lambda 函数。下面这个案例就是介绍transforns的用法。

2、数据变换案例

2.1通用 Transforms

mindspore.dataset.transforms 模块提供了一些通用的 Transforms,例如 Compose。Compose 接收一个数据增强操作序列,然后将其组合成单个数据增强操作。下面通过一个例子演示其使用方法。

2.1.1加载数据

我们下载 MNIST 数据集并加载训练数据集。

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

2.1.2 下载 MNIST 数据集

url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip"
path = download(url, "./", kind="zip", replace=True)

2.1.3加载训练数据集

train_dataset = MnistDataset('MNIST_Data/train')

2.2 查看数据形状

从数据集中取出一张图像并查看其形状。

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)

2.3 使用 Compose

我们将一系列数据变换操作组合在一起并应用到数据集上。这里使用的操作有 Rescale、Normalize 和 HWC2CHW。

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)

2.4 图像 Transforms

mindspore.dataset.vision 模块提供了一系列针对图像数据的 Transforms。在处理 MNIST 数据时,我们使用了 Rescale、Normalize 和 HWC2CHW。下面详细介绍这些变换。

2.4.1Rescale

Rescale 用于调整图像像素值的大小。参数包括 rescale 和 shift。每个像素将根据这些参数进行调整,输出的像素值计算公式为 output_i = input_i * rescale + shift。

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

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

2.4.2 Normalize

Normalize 用于对输入图像进行归一化。参数包括 mean、std 和 is_hwc。每个通道根据均值和标准差进行调整,计算公式为 output_c = (input_c - mean_c) / std_c。

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

2.4.3 HWC2CHW

HWC2CHW 用于转换图像格式。默认图像格式是 HWC(height, width, channel),转换后为 CHW(channel, height, width)。

hwc_image = np.expand_dims(normalized_image, -1)
hwc2chw = vision.HWC2CHW()
chw_image = hwc2chw(hwc_image)
print(hwc_image.shape, chw_image.shape)

2.5 文本 Transforms

mindspore.dataset.text 模块提供了一系列针对文本数据的 Transforms,包括分词(Tokenize)、构建词表、Token 转 Index 等操作。下面介绍其使用方法。

2.5.1 定义文本数据并加载

texts = ['Welcome to Beijing']
test_dataset = GeneratorDataset(texts, 'text')

2.5.2 PythonTokenizer

分词是文本数据的基础处理方法。这里使用基础的 PythonTokenizer 进行分词。

def my_tokenizer(content):
    return content.split()

test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))
print(next(test_dataset.create_tuple_iterator()))

2.5.3 Lookup

Lookup 用于将 Token 转换为 Index。首先从数据集中生成词表,然后进行词表映射。

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()))

2.6 Lambda Transforms

Lambda 函数是一种匿名函数,表达式会在调用时被求值。Lambda Transforms 提供了灵活性,可以定义任意的 Lambda 函数进行数据处理。

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()))

3、小结

通过以上步骤和示例,可以简单的使用 MindSpore 提供的 Transforms 对不同类型的数据进行预处理。这些变换操作可以将原始数据处理成适合模型训练的格式,提高模型的训练效果和效率。

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值