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
步骤 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
用数值创建张量
# 用数值创建张量
y = Tensor(1.0, dtype.int32)
z = Tensor(2, dtype.int32)
y
z
用Bool创建张量
# 用Bool创建张量
m = Tensor(True, dtype.bool_)
m
用tuple创建张量
# 用tuple创建张量
n = Tensor((1, 2, 3), dtype.int16)
n
用list创建张量
# 用list创建张量
p = Tensor([4.0, 5.0, 6.0], dtype.float64)
p
用常量创建张量
# 用常量创建张量
q = Tensor(1, dtype.float64)
q
步骤 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
x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32)
x.shape # 形状
x.dtype # 数据类型
x.ndim # 维度
x.size # 大小
步骤 4 张量的方法
asnumpy():将Tensor转换为NumPy的array。
y = Tensor(np.array([[True, True], [False, False]]), dtype.bool_)
# 将Tensor数据类型转换成NumPy
y_array = y.asnumpy()
y
y_array
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()
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)