《人工智能导论》实验2 多层感知机(MLP)手写数字识别_第1页
《人工智能导论》实验2 多层感知机(MLP)手写数字识别_第2页
《人工智能导论》实验2 多层感知机(MLP)手写数字识别_第3页
《人工智能导论》实验2 多层感知机(MLP)手写数字识别_第4页
《人工智能导论》实验2 多层感知机(MLP)手写数字识别_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验2多层感知机(MLP)手写数字识别一、实验目的及要求掌握使用scikit-learn构建多层感知机(MLP)分类器的方法。理解图像数据预处理流程:尺寸统一、像素归一化、展平与标签编码。掌握MLP的核心超参数:隐藏层结构、激活函数、优化器、学习率、迭代次数、早停等。能够绘制训练/验证损失曲线,识别过拟合与欠拟合现象。理解全连接神经网络处理图像时的局限:参数量大、忽略空间结构。二、实验学时3学时(建议时间分配:讲解15分钟,任务实践130分钟,总结报告15分钟)三、实验前准备软件环境:Python3.8及以上,建议使用JupyterNotebook或VSCode。依赖库:NumPy、Matplotlib、scikit-learn。安装命令如下:pipinstallnumpymatplotlibscikit-learn知识储备:已学习教材第5.3节(前馈神经网络与MLP)内容。数据准备:实验使用scikit-learn内置的load_digits手写数字数据集(8×8像素,1797张),无需联网下载;课后可尝试替换为MNIST数据集。在JupyterNotebook中运行绘图代码前,建议先执行`%matplotlibinline`,以保证图像正常显示。四、实验任务任务1加载与预处理手写数字数据(20分钟)使用sklearn.datasets.load_digits加载手写数字数据集;将像素值除以16进行归一化;数据集本身已是展平的64维向量;将标签转换为整数类型。任务2划分训练集与测试集(10分钟)按8:2划分训练集与测试集。任务3构建与训练MLP模型(40分钟)使用MLPClassifier构建一个具有两个隐藏层的网络(128→64),选择ReLU激活函数和Adam优化器。任务4模型评估与可视化(30分钟)计算测试集准确率、绘制混淆矩阵;随机抽取若干测试样本,对比真实标签与预测结果;可视化部分预测错误的8×8样本。任务5超参数对比实验(30分钟)分别改变隐藏层大小、激活函数、学习率等超参数,观察对训练过程和最终准确率的影响,填写对比表。参考代码以下为完整可运行代码。完整训练通常只需数秒到十几秒,请耐心等待:#实验七:多层感知机(MLP)手写数字识别

importwarnings

warnings.filterwarnings('ignore')

importnumpyasnp

importmatplotlib.pyplotasplt

fromsklearn.datasetsimportload_digits

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.neural_networkimportMLPClassifier

fromsklearn.metricsimportaccuracy_score,confusion_matrix,classification_report

#设置中文字体

plt.rcParams['font.sans-serif']=['SimHei','MicrosoftYaHei','ArialUnicodeMS']

plt.rcParams['axes.unicode_minus']=False

#1.加载手写数字数据集(load_digits为scikit-learn内置数据集,无需联网)

print("正在加载手写数字数据集...")

digits=load_digits()

X=digits.data.astype('float64')/16.0#像素值范围0-16,归一化到[0,1]

y=digits.target

print(f"样本数:{X.shape[0]},特征维度:{X.shape[1]},类别数:{len(np.unique(y))}")

#2.划分训练集与测试集

X_train,X_test,y_train,y_test=train_test_split(

X,y,test_size=0.2,random_state=42,stratify=y

)

print(f"训练样本数:{X_train.shape[0]},测试样本数:{X_test.shape[0]}")

#3.构建MLP模型

mlp=MLPClassifier(

hidden_layer_sizes=(128,64),

activation='relu',

solver='adam',

learning_rate_init=0.001,

max_iter=30,

early_stopping=False,

random_state=42,

verbose=True

)

print("\n开始训练MLP...")

mlp.fit(X_train,y_train)

#4.评估

y_pred=mlp.predict(X_test)

acc=accuracy_score(y_test,y_pred)

print(f"\n测试集准确率:{acc:.4f}")

print("\n分类报告:")

print(classification_report(y_test,y_pred))

#5.绘制训练损失曲线

plt.figure(figsize=(12,5))

plt.subplot(1,2,1)

plt.plot(mlp.loss_curve_,label='训练损失')

plt.xlabel('迭代轮次')

plt.ylabel('损失')

plt.title('MLP训练过程')

plt.legend()

plt.grid(True)

plt.subplot(1,2,2)

cm=confusion_matrix(y_test,y_pred)

plt.imshow(cm,cmap='Blues')

plt.colorbar()

plt.xlabel('预测标签')

plt.ylabel('真实标签')

plt.title('混淆矩阵')

plt.show()

#6.可视化预测错误的样本

errors=np.where(y_pred!=y_test)[0]

print(f"预测错误样本数:{len(errors)}")

plt.figure(figsize=(10,4))

fori,idxinenumerate(np.random.choice(errors,min(8,len(errors)),replace=False)):

plt.subplot(2,4,i+1)

plt.imshow(X_test[idx].reshape(8,8),cmap='gray')

plt.title(f"真实:{y_test[idx]},预测:{y_pred[idx]}")

plt.axis('off')

plt.suptitle('部分预测错误的样本')

plt.tight_layout()

plt.show()预期结果(参考)在1,437条训练样本上训练30个epoch,测试集准确率通常可达0.96–0.98。训练损失曲线应持续下降;若准确率仍不高,可适当增加epoch或增大网络规模。混淆矩阵主对角线颜色最深,说明大多数样本被正确分类;错误样本多为字形相近的数字(如4与9、3与8)。超参数对比表请在下表中填写不同超参数组合下的结果:超参数组合训练时间测试准确率观察与结论hidden=(256,128),relu,adam基线模型hidden=(128,64),relu,adam网络容量减小hidden=(256,128),tanh,adam更换激活函数hidden=(256,128),relu,sgd更换优化器learning_rate_init=0.01学习率增大五、实验重点、难点重点:MLP的构建流程、图像数据归一化与展平、训练/验证损失曲线的解读。难点:理解隐藏层数量与神经元数量对模型容量的影响;识别过拟合与欠拟合;理解全连接网络处理图像时参数量过大的问题。六、操作要点本实验使用scikit-learn内置的load_digits数据集,无需联网下载;课后可尝试替换为MNIST等更大规模数据集。为控制训练时间,课堂演示时可直接使用全部1,437条训练样本;课后可尝试更大规模的手写数字数据。建议记录每次实验的运行时间和最终准确率,便于超参数对比。若出现内存不足,可减少训练样本量或缩小隐藏层规模。七、注意事项MLP将图像展平为向量,丢失了像素间的空间关系,因此参数量大且对平移、旋转的鲁棒性较弱。训练神经网络需要一定时间,不要在课堂上临时安装大型依赖包。测试集只能用于最终评估,不能用于选择模型或调整超参数。早停法使用验证集

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论