数据变换Transform
- 首先解释数据转换,这里的变换跟数据类型转换不太像,主要是对数据做预处理,转成模型训练所需要的DataSet类型,MIndspore提供了针对文本、音频、图像,以及Lambda匿名函数的Transform。
- 本文主要记录常用的Transform
compose数据增强序列
- compose是transforms的一个子类,现在以image(height,width,channel(黑白单通道,RGB三通道))hwc转成cwh格式为例,首先组装一个自定义的compose,解释一下里面的内容,rescale是对像素值进行缩放,缩放至0-1之间;normalize是做标准化,使其均匀分布;定义的HWC2CHW,即上述中的图片格式转换。
composed = transforms.Compose(
[
vision.Rescale(1.0 / 255.0, 0),
vision.Normalize(mean=(0.1307,), std=(0.3081,)),
vision.HWC2CHW()
]
)
- compose定义完后,通过map将其与Dataset组装在一起,通过创建Dataset迭代器获取image,可以看到已经转成了CHW的格式了
train_dataset = train_dataset.map(composed, 'image')
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)
Vision图像转换
- Vision在定义compose时已经用到了,Vision是专门做图像数据处理的,包含rescale、normalize、HWC2CWH
- rescale就是将图片像素进行缩放,我们将1/255改成1/10看看结果。
-normalize本质是正态分布,也称标准化,其分布比归一化分布要更加均匀,通俗理解就是归一化是简单除以最大值获得最快的分类,标准化则是基于数据的特征给像素点做了重新的分类,这在边缘检测用的比较常见
-HWC2CWH图片格式的转换,不再赘述
TextTransform 文本转换
-
Tokenizer分词器,python自带的分词器本质上不是字典树,只是简单的按空格分词,如果要做到真正的分词应该构建字典树,以下为分词结果
-
LookUp词映射器,映射指的是函数的映射,lookup相当于提供了一个hashmap,将唯一的数字与词连接起来,一个数字只能表示一个词,词一般要进入LM语言模型才有用,而像词语点击量热度图完全可以将词语做映射,用映射的数字来训练模型。其更像是密码本,某一个数字唯一对应某一个词
## Lambda -
匿名函数,匿名函数像一个黑盒子,将数据集与匿名函数通过map组装在一起,数据集输出的value就会直接输出匿名函数运算的结果。自定义的数据集,所以通过generatorDataset构建数据集,可以在括号里完成Lambda函数编写,也可写成def再放入map中,创建数据集的迭代器,打印其列表,这里也是一个技巧,list(迭代器)可以输出所有内容,而next(迭代器)是下一个内容。不过一般用于数组
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()))