当前位置:   article > 正文

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

昇思25天学习打卡营第4天 | 数据变换
内容介绍:通常情况下,直接加载的原始数据并不能直接送入神经网络进行训练,此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换(Transforms),配合数据处理Pipeline来实现数据预处理。所有的Transforms均可通过`map`方法传入,实现对指定数据列的处理。

具体内容:

1. 导包

  1. import numpy as np
  2. from PIL import Image
  3. from download import download
  4. from mindspore.dataset import transforms, vision, text
  5. from mindspore.dataset import GeneratorDataset, MnistDataset

2. Compose

Compose接收一个数据增强操作序列,然后将其组合成单个数据增强操作。

  1. url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \
  2. "notebook/datasets/MNIST_Data.zip"
  3. path = download(url, "./", kind="zip", replace=True)
  4. train_dataset = MnistDataset('MNIST_Data/train')
  5. image, label = next(train_dataset.create_tuple_iterator())
  6. print(image.shape)
  7. composed = transforms.Compose(
  8. [
  9. vision.Rescale(1.0 / 255.0, 0),
  10. vision.Normalize(mean=(0.1307,), std=(0.3081,)),
  11. vision.HWC2CHW()
  12. ]
  13. )
  14. train_dataset = train_dataset.map(composed, 'image')
  15. image, label = next(train_dataset.create_tuple_iterator())
  16. print(image.shape)

3. Vision Transforms

mindspore.dataset.vision模块提供一系列针对图像数据的Transforms。在Mnist数据处理过程中,使用了Rescale、Normalize和HWC2CHW变换。

Rescale

Rescale变换用于调整图像像素值的大小,包括两个参数:

- rescale:缩放因子。
- shift:平移因子。

  1. random_np = np.random.randint(0, 255, (48, 48), np.uint8)
  2. random_image = Image.fromarray(random_np)
  3. print(random_np)
  4. rescale = vision.Rescale(1.0 / 255.0, 0)
  5. rescaled_image = rescale(random_image)
  6. print(rescaled_image)

4. Normalize

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

- mean:图像每个通道的均值。
- std:图像每个通道的标准差。
- is_hwc:bool值,输入图像的格式。True为(height, width, channel),False为(channel, height, width)。

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

5. HWC2CHW

HWC2CHW变换用于转换图像格式。在不同的硬件设备中可能会对(height, width, channel)或(channel, height, width)两种不同格式有针对性优化。MindSpore设置HWC为默认图像格式,在有CHW格式需求时,可使用该变换进行处理。

这里我们先将前文中`normalized_image`处理为HWC格式,然后进行转换。可以看到转换前后的shape发生了变化。

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

6. Text Transforms

mindspore.dataset.text模块提供一系列针对文本数据的Transforms。与图像数据不同,文本数据需要有分词(Tokenize)、构建词表、Token转Index等操作。

首先我们定义三段文本,作为待处理的数据,并使用`GeneratorDataset`进行加载。

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

7. PythonTokenizer

分词(Tokenize)操作是文本数据的基础处理方法,MindSpore提供多种不同的Tokenizer。这里我们选择基础的`PythonTokenizer`举例,此Tokenizer允许用户自由实现分词策略。随后我们利用`map`操作将此分词器应用到输入的文本中,对其进行分词。

  1. def my_tokenizer(content):
  2. return content.split()
  3. test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))
  4. print(next(test_dataset.create_tuple_iterator()))

8. Lookup

`Lookup`为词表映射变换,用来将Token转换为Index。在使用`Lookup`前,需要构造词表,一般可以加载已有的词表,或使用`Vocab`生成词表。这里我们选择使用`Vocab.from_dataset`方法从数据集中生成词表。

vocab = text.Vocab.from_dataset(test_dataset)

获得词表后我们可以使用`vocab`方法查看词表。

print(vocab.vocab())

生成词表后,可以配合`map`方法进行词表映射变换,将Token转为Index。

  1. test_dataset = test_dataset.map(text.Lookup(vocab))
  2. print(next(test_dataset.create_tuple_iterator()))

9. Lambda Transforms

Lambda函数是一种不需要名字、由一个单独表达式组成的匿名函数,表达式会在调用时被求值。Lambda Transforms可以加载任意定义的Lambda函数,提供足够的灵活度。在这里,我们首先使用一个简单的Lambda函数,对输入数据乘2:

  1. test_dataset = GeneratorDataset([1, 2, 3], 'data', shuffle=False)
  2. test_dataset = test_dataset.map(lambda x: x * 2)
  3. print(list(test_dataset.create_tuple_iterator()))

可以看到`map`传入Lambda函数后,迭代获得数据进行了乘2操作。

我们也可以定义较复杂的函数,配合Lambda函数实现复杂数据处理:

  1. def func(x):
  2. return x * x + 2
  3. test_dataset = test_dataset.map(lambda x: func(x))
  4. print(list(test_dataset.create_tuple_iterator()))

数据变换是深度学习中不可或缺的一环,它直接影响到模型的训练效果和泛化能力。MindSpore提供了丰富的数据变换方法,包括面向图像、文本、音频等不同数据类型的Transforms,这大大减轻了我们在数据预处理上的工作负担。特别是对于那些需要复杂数据增强的任务,MindSpore的Compose功能能够轻松地将多个数据增强操作组合起来,形成一个完整的数据预处理流程。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/844453
推荐阅读
相关标签
  

闽ICP备14008679号