基于 MindSpore 的优化器实验(昇腾本地化)
文章简介优化器是神经网络训练核心组件负责更新网络参数、最小化损失函数。本文基于昇腾平台 MindSpore 框架使用鸢尾花 Iris 数据集对比无优化器、SGD、Momentum、Adam四种优化器在极值寻优与分类任务上的表现完整复现实验流程分析不同优化器特点。适合 MindSpore 入门、昇腾 AI 实验报告参考。实验环境Python3 MindSpore 昇腾环境 数据集鸢尾花 Iris 数据集共 150 条样本4 个特征3 个花卉类别一、实验背景神经网络初始化参数是随机值依靠优化器不断迭代更新参数逐步逼近最优参数完成模型拟合。不同优化器更新策略不同收敛速度、抗震荡能力差异很大。 本次实验在 MindSpore 昇腾本地化环境对比无优化器、SGD、Momentum、Adam观察损失下降、模型分类精度差异理解各类优化器原理。鸢尾花数据集简介数据集包含 3 类鸢尾花每类 50 条样本总计 150 条。特征为花萼长、花萼宽、花瓣长、花瓣宽单位 cm标签为花卉类别是经典多分类测试数据集。二、实验目的掌握 MindSpore 框架中优化器的调用方法与作用。学会使用 MindSpore 搭建 SGD、Momentum、Adam 优化器实验。理解不同优化器的基本原理对比收敛效果。三、实验任务流程任务 1创建实验环境登录 Jupyter Notebook 实验平台点击New选择Python3(ipykernel)新建 Notebook 开发环境。获取鸢尾花数据集Iris 数据集可从 UCI 公开数据集地址下载文件为 iris.data。将数据集上传至 Notebook 工作目录也可直接调用 MindSpore 内置接口加载数据集。任务 2导入依赖库加载并预处理数据集import numpy as np import mindspore as ms from mindspore import nn, Tensor from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import OneHotEncoder # 昇腾设备配置 ms.set_context(device_targetAscend) # 加载鸢尾花数据集 iris load_iris() x_data iris.data.astype(np.float32) y_data iris.target.reshape(-1,1) # 标签独热编码 enc OneHotEncoder(sparse_outputFalse) y_onehot enc.fit_transform(y_data).astype(np.float32) # 划分训练集、测试集 x_train, x_test, y_train, y_test train_test_split(x_data, y_onehot, test_size0.2, random_state42) # 转为MindSpore Tensor x_train Tensor(x_train) y_train Tensor(y_train) x_test Tensor(x_test) y_test Tensor(y_test)任务 3搭建简单分类网络搭建简易全连接网络用于鸢尾花三分类任务class IrisNet(nn.Cell): def __init__(self): super(IrisNet, self).__init__() self.fc1 nn.Dense(4,16) self.fc2 nn.Dense(16,3) self.relu nn.ReLU() def construct(self,x): x self.relu(self.fc1(x)) out self.fc2(x) return out # 损失函数交叉熵损失 loss_fn nn.SoftmaxCrossEntropyWithLogits(sparseFalse)任务 4定义 4 组优化器分别训练# 模型初始化 model_noopt IrisNet() model_sgd IrisNet() model_mom IrisNet() model_adam IrisNet() # 四种优化器 opt_noopt None opt_sgd nn.SGD(model_sgd.trainable_params(), learning_rate0.01) opt_mom nn.Momentum(model_mom.trainable_params(), learning_rate0.01, momentum0.9) opt_adam nn.Adam(model_adam.trainable_params(), learning_rate0.01) # 封装训练网络 from mindspore.train import Model model_no Model(model_noopt, loss_fn) model_sgd_net Model(model_sgd, loss_fn, optimizeropt_sgd) model_mom_net Model(model_mom, loss_fn, optimizeropt_mom) model_adam_net Model(model_adam, loss_fn, optimizeropt_adam)任务 5训练、记录损失评估结果epochs 30 # 此处省略循环训练代码实验中记录每轮loss绘制损失曲线 # 训练完成后在测试集评估精度四、优化器原理简述无优化器参数不更新损失不会下降模型无法学习作为对照组。SGD 随机梯度下降沿梯度反方向更新参数优点简单缺点收敛震荡、容易卡在局部极小值。Momentum 动量优化器引入动量累积历史梯度平滑更新方向减弱震荡加速收敛。Adam结合动量与自适应学习率为不同参数动态调整学习率收敛速度快是最常用优化器。五、实验结果分析无优化器训练损失基本不变模型不具备拟合能力分类准确率很低。SGD损失缓慢下降曲线波动较大收敛速度慢。Momentum借助动量减少梯度震荡收敛速度优于基础 SGD。Adam收敛最快损失快速下降最终测试集分类精度最高但学习率设置不当容易出现过拟合。可视化可绘制 4 条损失曲线在一张图直观对比不同优化器收敛趋势。六、实验总结本实验在昇腾 MindSpore 平台完成鸢尾花数据集分类对比 4 种优化器训练效果。SGD 简单但震荡明显Momentum 依靠动量缓解梯度震荡Adam 自适应学习率收敛性能最优。优化器直接决定神经网络的收敛速度与拟合效果实际深度学习任务中Adam 是首选SGD、Momentum 可根据场景选用。七、常见问题昇腾环境报错确认device_targetAscendMindSpore 版本与昇腾驱动匹配。损失不下降检查学习率学习率过大不收敛过小收敛极慢。数据集加载失败确认 iris.data 文件上传路径正确。