【mindspore】mindspore基础操作

mindspore基础操作

mindspore学习笔记,仅供参考和学习分享。

Tensor

具体参考:张量 Tensor

属性描述
形状(shape)Tensor的shape,是一个tuple
数据类型(dtype)Tensor的dtype,是MindSpore的一个数据类型
单个元素大小(itemsize)Tensor中每一个元素占用字节数,是一个整数
占用字节数量(nbytes)Tensor占用的总字节数,是一个整数
维数(ndim)Tensor的秩,也就是len(tensor.shape),是一个整数
元素个数(size)Tensor中所有元素的个数,是一个整数
每一维步长(strides)Tensor每一维所需要的字节数,是一个tuple

普通算术运算有:加(+)、减(-)、乘(*)、除(/)、取模(%)、整除(//)。
mindspore.ops.concat:将给定维度上的一系列张量连接起来。输入为多个Tensor组合的元组或列表。
mindspore.ops.stack:在新的维度上将两个张量合并起来。输入为多个Tensor组合的元组或列表。

Dataset

从dataset中取一个数据

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)

具体流程是:先取数据集的迭代器(create_tuple_iterator()/create_dict_iterator()),然后使用next()取出迭代器指向的第一个数据。
打印出来的image格式为(28, 28, 1),即高x宽x通道数(HWC)为28x28x1

显示图像

def visualize(dataset):
    figure = plt.figure(figsize=(4, 4))
    cols, rows = 3, 3

    for idx, (image, label) in enumerate(dataset.create_tuple_iterator()):
        figure.add_subplot(rows, cols, idx + 1)
        plt.title(int(label))
        plt.axis("off")
        plt.imshow(image.asnumpy().squeeze(), cmap="gray")
        if idx == cols * rows - 1:
            break
    plt.show()

需要关注的是image.asnumpy().squeeze()这个操作。

matplotlib的pyplot模块操作的是numpy类型数据,不支持直接操作tensor,所以需要先使用asnumpy()转换成numpy()类型数据;

matplotlib.pyplot.imshow()

imshow的第一个参数是图像数据。支持的输入格式为:
(M,N) :带有标量数据的图像。数据可视化使用色彩图。
(M,N,3) :具有RGB值的图像(float或uint8)。
(M,N,4) :具有RGBA值的图像(float或uint8),即包括透明度。
前两个维度(M,N)定义了行和列图片,即图片的高和宽;
而当前image的格式是(28, 28, 1),即灰度图的最低维占了一个维度存储数值,这个单独的维度需要被删除以满足imshow的格式。

numpy.suqeeze()

从数组的形状中删除单维度条目,即把shape中为1的维度去掉,将数值填充到其他维度。需要传入两个参数:输入的数组 和 指定删除的维度,此处不指定维度,默认删除所有单维度。

因此使用suqeeze()后,图像数据即可满足imshow()的格式要求。

数据集处理

map()

dataset.map():针对数据集的指定列进行指定方式的数据变换。
查看数据集有哪些列:

print(dataset.get_col_names())

使用map()将image列的每个数据进行1/255的缩放,使用缩放接口:vision.Rescale()

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

batch

batch能将数据集打包输出,使用batch前每次取1个数据,使用batch后每次取一组数据。
经过batch后,取出来的数据增加一维,大小为batch_size。

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)

# batch批处理,batch后的数据增加一维,大小为batch_size
train_dataset = train_dataset.batch(batch_size=64)

image, label = next(train_dataset.create_tuple_iterator())
print(image.shape, image.dtype)

输出:

(28, 28, 1) Float32
(64, 28, 28, 1) Float32

自定义数据集

通过可迭代对象构造自定义数据集

1、构造一个类,该类支持迭代输出(支持__getitem__(self, index)方法 和 len(self)方法)
2、实例化该类,然后使用GeneratorDataset()方法生成数据集
然后就得到了mindspore格式下的数据集了。

from mindspore.dataset import GeneratorDataset
import numpy as np

class BaseData:
    '''
    base data for dataset
    '''
    def __init__(self) -> None:
        self.data = np.random.rand(10)
        self.label = np.random.rand(10)

    def __getitem__(self, idx):
        return self.data[idx], self.label[idx]

    def __len__(self):
        return len(self.data)

base_data = BaseData()
my_dataset = GeneratorDataset(source=base_data, column_names=["data", "labels"])
# 打印一个数据
data, label = next(my_dataset.create_tuple_iterator())
print(data, label)

除此以外,GeneratorDataset还支持通过迭代器生成数据集,这要求构造的类支持__next__(self)、iter(self)和__len__()三个方法,具体实现方法可参考文档。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值