数据变换Transforms
- 介绍
- Transforms分类
- Common Transforms
- Vision Transforms
- Text Transforms
- PythonTokenizer
- Lookup
- Lambda Transforms
- 参考
介绍
MindSpore提供不同种类的数据变换(Transforms),配合数据处理Pipeline来实现数据预处理。
所有的Transforms均可通过map方法传入,实现对指定数据列的处理。
mindspore.dataset提供了面向图像、文本、音频等不同数据类型的Transforms,同时也支持使用Lambda函数。
Transforms分类
Common Transforms
mindspore.dataset.transforms模块支持一系列通用Transforms。
Vision Transforms
mindspore.dataset.vision模块提供一系列针对图像数据的Transforms。
此模块用于图像数据增强,其中有一部分增强是基于C++ OpenCV实现的,具有较好的性能,而另一部分是基于Python Pillow实现的。
Text Transforms
mindspore.dataset.text模块提供一系列针对文本数据的Transforms。与图像数据不同,文本数据需要有分词(Tokenize)、构建词表、Token转Index等操作。
PythonTokenizer
分词(Tokenize)操作是文本数据的基础处理方法。以PythonTokenizer举例实现自定义分词策略。
代码示例:
# 自定义分词函数
def my_tokenizer(content):
return content.split()
test_dataset = test_dataset.map(text.PythonTokenizer(my_tokenizer))
print(next(test_dataset.create_tuple_iterator()))
# 运行结果:
# [Tensor(shape=[3], dtype=String, value= ['Welcome', 'to', 'Beijing'])]
Lookup
Lookup为词表映射变换,用来将Token转换为Index。在使用Lookup前,需要构造词表,一般可以加载已有的词表,或使用Vocab生成词表。
代码示例:
# 使用Vocab.from_dataset方法从数据集中生成词表
vocab = text.Vocab.from_dataset(test_dataset)
print(vocab.vocab())
# 输出
# {'to': 2, 'Beijing': 0, 'Welcome': 1}
# 配合map方法进行词表映射变换,将Token转为Index
test_dataset = test_dataset.map(text.Lookup(vocab))
print(next(test_dataset.create_tuple_iterator()))
# 输出
# [Tensor(shape=[3], dtype=Int32, value= [1, 2, 0])]
Lambda Transforms
Lambda函数是一种不需要名字、由一个单独表达式组成的匿名函数,表达式会在调用时被求值。
Lambda Transforms可以加载任意定义的Lambda函数,提供足够的灵活度。
代码示例:
# 使用GeneratorDataset接口自定义数据集
test_dataset = GeneratorDataset([1, 2, 3], 'data', shuffle=False)
# 方式一:使用一个简单的Lambda函数,对输入数据乘2
test_dataset = test_dataset.map(lambda x: x * 2)
print(list(test_dataset.create_tuple_iterator()))
# 运行结果:
# [[Tensor(shape=[], dtype=Int64, value= 2)], [Tensor(shape=[], dtype=Int64, value= 4)], [Tensor(shape=[], dtype=Int64, value= 6)]]
# 方式二:定义较复杂的函数,配合Lambda函数实现复杂数据处理
def func(x):
return x * x + 2
test_dataset = test_dataset.map(lambda x: func(x))
print(list(test_dataset.create_tuple_iterator()))
# 运行结果:
# [[Tensor(shape=[], dtype=Int64, value= 6)], [Tensor(shape=[], dtype=Int64, value= 18)], [Tensor(shape=[], dtype=Int64, value= 38)]]
参考
- MindSpore的api文档
截图时间