MindSpore实现图片分类
1399
2022-05-29
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)
3 参考资料
https://gitee.com/mindspore/mindspore
https://github.com/mindspore-ai/mindspore
MindSpore
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。