在人工智能与机器学习研究与应用领域,目前较流行的深度学习框架主要有Facebook PyTorch、Google TensorFlow/Keras、华为MindSpore 、百度PaddlePaddle等,Python语言常与这些深度学习框架联合使用。本文以Windows10 Anaconda3(Python3.7.0)和华为公司2021年3月底发布的CPU版MindSpore1.2开源深度学习框架为例,介绍Anaconda、MindSpore及Jupyter Notebook IDE Python应用环境的安装及应用示例。
内容提要
一、Anaconda3安装及MindSpore1.2虚拟环境创建
二、MindSpore安装与测试
三、Jupyter Notebook环境MindSpore应用测试
四、Jupyter Notebook环境MindSpore应用举例
一、Win10 Anaconda3安装及MindSpore1.2虚拟环境创建
1.Anaconda3安装
Anaconda官网一般显示的是最新版本,其下载网址是:https://www.anaconda.com/products/individual,如果想要下载以往版本,可以在下面网址下载:https://repo.anaconda.com/archive/。上面网站下载Anaconda较慢,我们可从清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载Anaconda。这里下载Windows版64位Anaconda3(Anaconda3-5.3.0-Windows-x86_64.exe, 631.4 MB, 2018-09-28 06:4,Python对应版本是Python3.7.0)。下载完毕后,运行Anaconda3-5.3.0-Windows-x86_64.exe安装软件,按提示步骤安装Anaconda3。
2.MindSpore虚拟环境创建
成功安装Anaconda3后,在开始菜单点击【Anaconda Prompt】进入Anaconda命令行窗口。
(1)选择一个Python版本安装(这里选择python3.7.0版本),并创建虚拟环境MindSpore:
conda create --name mindspore python=3.7.0 //虚拟环境的名称是mindspore
(2)查看MindSpore虚拟环境是否安装成功:
conda info --envs
我们可以看到有base和mindspore两个虚拟环境 (见图1)。
图1
(3) 激活MindSpore虚拟环境mindspore:
activate mindspore
用activate命令激活mindspore虚拟环境。
二、MindSpore安装与测试
1.MindSpore下载
进入华为MindSpore官网列表版本页面链接https://www.mindspore.cn/versions,这里下载CPU版的Windows 64位MindSpore1.2.0版本组件 (见图2的蓝色框)。
图2
2.MindSpore安装
将下载好的mindspore-1.2.0-cp37-cp37m-win_amd64.whl文件移到要安装目录,不同的机器安装目录有所不同,本机安装目录为C:/Users/86131(见图3)。在Anaconda Prompt输入以下命令安装MindSpore:
pip install mindspore-1.2.0-cp37-cp37m-win_amd64.whl
图3
3.测试MindSpore是否安装成功
(1)进入Anaconda Prompt,激活mindspore:activate mindspore
(2)进入python:python
(3)测试numpy:import numpy
(4)测试mindspore:import mindspore
(5)显示mindspore版本:mindspore.__version __
如果以上步骤的命令执行都没有问题,表明MindSpore安装成功(见图4)。
图4
3.将MindSpore嵌入到Jupyter Notebook
在Anaconda中,我们常使用Jupyter Notebook。将 MindSpore嵌入到 Jupyter Notebook中的命令如下:
(1)激活MindSpore虚拟环境mindspore:activate mindspore
(2)在虚拟环境mindspore中安装Jupyter Notebook:pip install jupyter notebook
4. 在mindspore虚拟环境中安装ipykernel
pip install ipykernel
5. 将Python环境名称写入Notebook的kernel中
命令格式为:
python -m ipykernel install --user --name mindspore --display-name “Python环境名称”
这里设定Python环境名称为mindspore1.2,命令为:
python -m ipykernel install --user --name mindspore --display-name “mindspore1.2”
三、Jupyter Notebook环境MindSpore应用测试
启动电脑,通过【开始】菜单栏,点击【Jupyter Notebook(mindspore)】(图5),进入Jupyter Notebook IDE Python应用环境。
图5
以下是华为官网(https://www.mindspore.cn/install)提供的昇腾(Ascend)系列AI处理器环境下的MindSpore测试代码案例:
import numpy as np
from mindspore import Tensor
import mindspore.ops as ops
import mindspore.context as context
context.set_context(device_target=“Ascend”)
x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x, y))
在Jupyter Notebook的In[1]输入单元粘贴以上代码,由于本机已安装了X86 CPU版本的MindSpore1.2.0,这里将context.set_context(device_target=“Ascend”)语句中的昇腾标识“Ascend”改为X86标识“CPU”,见图6所示。
图6
在[Jupyter Notebook]主菜单中,依次选取[Kernel]→[Change kernel] →[mindspore1.2] (见图7的红色框),选中Kernel为mindspore1.2。
图7
按下[Ctrl]+[Enter]组合键运行测试代码,执行结果见图8所示,表明Jupyter Notebook环境下MindSpore测试代码运行正确。
图8
接下来,还可继续在Anaconda Prompt的mindspore虚拟环境下,使用pip install安装一些Python第三方库如sklearn、matplotlib等,这样我们就能在新建的Jupyter Notebook IDE Python环境下采用MindSpore深度学习框架并结合多种Python第三方库进行机器学习、神经网络、深度学习、科学计算等领域的科学实验与应用编程了。
四、Jupyter Notebook环境MindSpore应用举例
应用例:Iris(鸢尾花)数据集是常用于机器学习的一种多分类实验数据集,该数据集由著名统计学家Fisher于1936年收集整理。Iris数据集包含150个数据集(见图9),分为3类,每类50个样本数据,每个样本数据包含4个特征/属性。可通过萼片(Sepal)长度、萼片宽度、花瓣(Petal)长度、花瓣宽度4个特征预测鸢尾花属于(Setosa山鸢尾,Versicolour杂色鸢尾,Virginica维吉尼亚鸢尾)三种鸢尾花卉中的哪一类。 Iris数据集中各样本的四个特征长度和宽度均以cm为单位。
图9
现设计一个MLP(Multi-Layer Perceptron,多层感知器)神经网络实现鸢尾花的三分类。假设鸢尾花三分类问题的MLP神经网络结构如图10所示,该神经网络包括一个输入层、两个隐含层和一个输出层。输入层为包含4个特征的模式向量[x1, x2, x3, x4]’;第一个隐含层包含4个神经元,使用ReLU激活函数,它是一种在多层神经网络中十分有效的激活函数;第二个隐含层包含6个神经元,同样使用ReLU激活函数;输出层使用3个神经元,采用Softmax激活函数用来输出网络预测每个Iris类值的概率,选择具有最高概率的输出以便产生清晰的Iris分类结果 (注意,本例假设的网络结构并非最优,实际应用中需要进行NN参数调节实验,关于NN调参方法此略)。
图10
对应于图10的鸢尾花三分类MLP神经网络架构,下面给出采用华为MindSpore实现鸢尾花三分类神经网络模型的程序:
import numpy as np
import mindspore.dataset as ds
import mindspore
from mindspore import Model
from mindspore.train.callback import LossMonitor
from mindspore.nn.loss import SoftmaxCrossEntropyWithLogits
from sklearn import datasets
class MLP(mindspore.nn.Cell):
# 定义需要的操作
def __init__(self):
super(MLP, self).__init__()
self.fc1 = mindspore.nn.Dense(4, 4)
self.fc2 = mindspore.nn.Dense(4, 6)
self.fc3 = mindspore.nn.Dense(6, 3)
self.relu = mindspore.nn.ReLU()
self.softmax = mindspore.nn.Softmax()
# 定义网络的计算过程
def construct(self, x):
x = self.relu(self.fc1(x))
x = self.relu(self.fc2(x))
x = self.softmax(self.fc3(x))
return x
class IrisDatasetGenerator:
def __init__(self, data, target, is_train):
train_num = int(len(data) * 0.8)
if is_train:
self.data = data[:train_num].astype(np.float32)
self.label = target[:train_num].astype(np.int32)
print(f"data-len={len(self.data)}")
else:
self.data = data[train_num:].astype(np.float32)
self.label = target[train_num:].astype(np.int32)
print(f"data-len={len(self.data)}")
def __getitem__(self, index):
return self.data[index], self.label[index]
def __len__(self):
return len(self.data)
def gen_dataset(data, label, is_train=True):
dataset_generator = IrisDatasetGenerator(data, label, is_train)
iris_ds = mindspore.dataset.GeneratorDataset(dataset_generator,
["data", "label"], shuffle=True)
iris_ds = iris_ds.batch(batch_size)
return iris_ds
if __name__ == '__main__':
# 创建MLP网络及定义超参数
net = MLP()
epochs = 200
batch_size = 5
# 定义优化器与损失函数
net_opt = mindspore.nn.Adam(net.trainable_params())
net_loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
model = Model(net, net_loss, net_opt, metrics={"acc", "loss"})
callbacks = [LossMonitor(per_print_times=5)]
# 从sklearn中加载鸢尾花Iris数据
dataset = datasets.load_iris()
x = dataset.data
y = dataset.target
# 将数据打乱
state = np.random.get_state()
np.random.shuffle(x)
np.random.set_state(state)
np.random.shuffle(y)
# 训练
print("Start training...")
iris_train_ds = gen_dataset(x, y, is_train=True) # 生成mindspore数据集对象
model.train(epochs, iris_train_ds, callbacks=callbacks)
# 测试
print("Start testing...")
iris_val_ds = gen_dataset(x, y, is_train=False) # 生成mindspore数据集对象
res = model.eval(iris_val_ds)
print(res)
Iris数据集可期待的模型准确率一般在95%以上。以上程序在本机Jupyter Notebook+MindSpore环境下运行通过,运行结果见图11所示。
图11
每次运行程序,模型准确率结果会有所不同,图11中的准确率(acc: accuracy)为91%、损失率(loss)为0.63。
如果不再使用自建的mindspore虚拟环境,也可使用命令conda remove -n mindspore --all将其删除。
发布日期:2021年05月22日