mindspore

mindspore学习——2

Dataset

1.加载

from mindspore.dataset import vision
from mindspore.dataset import MnistDataset, GeneratorDatase
//仅支持解压后的数据文件
from download import download 
//下载数据集并解压

2.迭代

加载完数据集后,我们需要迭代获取数据以进行训练。

//create_tuple_iterator
//create_dict_iterator
//都为接口,创建数据迭代器
for idx, (image, label) in enumerate(dataset.create_tuple_iterator()):

3.常规操作

1.shuffle

数据集随机shuffle可以消除数据排列造成的分布不均问题

2.map

map可以针对数据集指定列(column)添加数据变换(Transforms)


image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)
//(28, 28, 1) UInt8

train_dataset = train_dataset.map(vision.Rescale(1.0 / 255.0, 0), input_columns='image')

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)
//(28, 28, 1) Float32

3.batch

将数据集打包为固定大小的batch是使用梯度下降进行模型优化的折中方法


train_dataset = train_dataset.batch(batch_size=32)

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)
//(32, 28, 28, 1) Float32

4.自定义数据集

对于一些mindspore 暂不支持的数据集,需要用GeneratorDataset接口实现自定义方式的数据集加载

data = Iterable()
dataset = GeneratorDataset(source=data, column_names=["data", "label"])

Transforms

主要就是对直接加载的原始数据进行预处理。

1.Commen Transforms

compose
1.1

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

1.2

# Download data from open datasets

url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \
      "notebook/datasets/MNIST_Data.zip"
 //下载路径
path = download(url, "./", kind="zip", replace=True)
 //下载到根目录,格式,是否取代同名文件
train_dataset = MnistDataset('MNIST_Data/train')
 
1.3

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)

//
train_dataset = train_dataset.map(vision.Rescale(1.0 / 255.0, 0), input_columns='image')
//
//对比map原本的参数结构,compose提前设定了更多的量,并放入其中


2.Vision Transforms

1.Rescale

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

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

图像的每个像素将根据这两个参数进行调整,输出的像素值为output=input∗rescale+shift_output=input∗rescale+shift

make:
random_np = np.random.randint(0, 255, (48, 48), np.uint8)
random_image = Image.fromarray(random_np)
transform:
rescale = vision.Rescale(1.0 / 255.0, 0)
rescaled_image = rescale(random_image)
2.Normalize

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

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

图像的每个通道将根据meanstd进行调整,计算公式为output=(input−mean_std)output=(input−mean_std),其中 cc代表通道索引.

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

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

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

hwc_image = np.expand_dims(normalized_image, -1)
hwc2cwh = vision.HWC2CHW()
chw_image = hwc2cwh(hwc_image)

3.Text Transforms

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

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

1.BasicTokenizer
test_dataset = test_dataset.map(text.BasicTokenizer())
print(next(test_dataset.create_tuple_iterator()))
//
[Tensor(shape=[5], dtype=String, value= ['我', '喜', '欢', 'China', '!'])]
2.Lookup

vocab = text.Vocab.from_dataset(test_dataset)

print(vocab.vocab())
//
{'迎': 11, '我': 10, '您': 9, '京': 6, 'to': 5, '!': 12, '喜': 8, 'Welcome': 4, 'China': 3, '北': 7, 'Beijing': 2, '!': 1, '欢': 0}

4.Lambda Transforms

//看不懂

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值