《MindSpore基础实践》——MindSpore基础

1 MindSpore介绍

1.1 关于MindSpore

MindSpore是端边云全场景按需协同的华为自研AI计算框架,提供全场景统一API,为全场景AI的模型开发、模型运行、模型部署提供端到端能力。

MindSpore采用端-边-云按需协作分布式架构、微分原生编程新范式以及AI Native新执行模式,实现更好的资源效率、安全可信,同时降低行业AI开发门槛、释放昇腾芯片算力,助力普惠AI。

详情参考:MindSpore官网

1.2 MindSpore安装

MindSpore支持Ascend、GPU、CPU,大家可以根据自己的平台的选择适合自己的MindSpore包,下面以Windows平台为例进行安装。


MindSpore是支持Windows平台的,只不过只能以CPU的模式运行(暂时不支持Windows平台的GPU)。如果希望尝试MindSpore对GPU的支持,需要使用Ubuntu系列或者华为的EulerOS。

1.3 安装Anaconda

非常推荐使用Anaconda作为Python虚拟环境的管理。

你可以去Anaconda官网下载,一路Next即可。

1.4 创建MindSpore的Python Env

目前MindSpore仅仅支持Python 3.7.5,下面创建的pyhton env就叫做mindspore:

conda create -n mindspore python=3.7.5

1.5 安装MindSpore

我们使用pip方式进行安装

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.1/MindSpore/cpu/windows_x64/mindspore-1.2.1-cp37-cp37m-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

1.6 验证是否安装成功

python -c “import mindspore;print(mindspore.version)”

如果输出MindSpore版本号,说明MindSpore安装成功了,如果输出No module named 'mindspore'说明未安装成功。

2 MindSpore基础

2.1 张量和数据类型

张量(Tensor)是MindSpore网络运算中的基本数据结构。张量中的数据类型可参考dtype。
不同维度的张量分别表示不同的数据,0维张量表示标量,1维张量表示向量,2维张量表示矩阵,3维张量可以表示彩色图像的RGB三通道等等。

MindSpore张量支持不同的数据类型,包含int8、int16、int32、int64、uint8、uint16、uint32、uint64、float16、float32、float64、bool_,与NumPy的数据类型一一对应。
在MindSpore的运算处理流程中,Python中的int数会被转换为定义的int64类型,float数会被转换为定义的float32类型。

步骤 1 指定MindSpore数据类型

导入MindSpore,设置Jupyter notebook的cell同时输出多行。

# 导入MindSpore
import mindspore
from mindspore import dtype 
from mindspore import Tensor

# cell同时输出多行
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
# 指定数据类型
a = 1
type(a)
b = Tensor(a, dtype.float64) 
b.dtype 

image.png

步骤 2 张量构造

构造张量时,支持传入Tensor、float、int、bool、tuple、list和NumPy.array类型,其中tuple和list里只能存放float、int、bool类型数据。

Tensor初始化时,可指定dtype。如果没有指定dtype,初始值int、float、bool分别生成数据类型为mindspore.int32、mindspore.float32、mindspore.bool_的0维Tensor, 初始值tuple和list生成的1维Tensor数据类型与tuple和list里存放的数据类型相对应,如果包含多种不同类型的数据,则按照优先级:bool < int < float,选择相对优先级最高类型所对应的mindspore数据类型。 如果初始值是Tensor,则生成的Tensor数据类型与其一致;如果初始值是NumPy.array,则生成的Tensor数据类型与之对应。

用数组创建张量

import numpy as np
from mindspore import Tensor

# 用数组创建张量
x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32)
x

image.png

用数值创建张量

# 用数值创建张量
y = Tensor(1.0, dtype.int32)
z = Tensor(2, dtype.int32)
y
z

image.png

用Bool创建张量

# 用Bool创建张量
m = Tensor(True, dtype.bool_)
m

image.png

用tuple创建张量

# 用tuple创建张量
n = Tensor((1, 2, 3), dtype.int16)
n

image.png
用list创建张量

# 用list创建张量
p = Tensor([4.0, 5.0, 6.0], dtype.float64)
p

image.png

用常量创建张量

# 用常量创建张量
q = Tensor(1, dtype.float64)
q

image.png

步骤 3 张量的属性

张量的属性包括形状(shape)和数据类型(dtype)。

  • 形状:Tensor的shape,是一个tuple。
  • 数据类型:Tensor的dtype,是MindSpore的一个数据类型。
x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32)
x_shape = x.shape  # 形状
x_dtype = x.dtype  # 数据类型

x_shape
x_dtype

image.png

x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32)

x.shape # 形状
x.dtype # 数据类型
x.ndim  # 维度
x.size  # 大小

image.png

步骤 4 张量的方法

asnumpy():将Tensor转换为NumPy的array。

y = Tensor(np.array([[True, True], [False, False]]), dtype.bool_)

# 将Tensor数据类型转换成NumPy
y_array = y.asnumpy()

y
y_array

image.png

2.2 数据集加载

MindSpore.dataset提供API来加载和处理各种常见的数据集,如MNIST, CIFAR-10, CIFAR-100, VOC, ImageNet, CelebA等。

步骤 1 加载MNIST数据集

mindspore.dataset.MnistDataset

import os
import mindspore.dataset as ds
import matplotlib.pyplot as plt

dataset_dir = "./data/train"  # 数据集路径

# 从mnist dataset读取3张图片
mnist_dataset = ds.MnistDataset(dataset_dir=dataset_dir, num_samples=3)

# 设置图像大小
plt.figure(figsize=(8,8))
i = 1

# 打印3张子图
for dic in mnist_dataset.create_dict_iterator(output_numpy=True):
    plt.subplot(3,3,i)
    plt.imshow(dic['image'][:,:,0])
    plt.axis('off')
    i +=1

plt.show()

image.png
MindSpore还支持加载多种数据存储格式下的数据集,用户可以直接使用mindspore.dataset中对应的类加载磁盘中的数据文件。

步骤 2 加载NumPy数据集

mindspore.dataset.NumpySlicesDataset

import mindspore.dataset as ds

data = ds.NumpySlicesDataset([1, 2, 3], column_names=["col_1"])
for x in data.create_dict_iterator():
    print(x)

image.png

3 参考资料

(完)