數據變換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 + 2test_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文檔
截圖時間