目录
1.实验内容
1.1多层感知机
多层感知器(MLP)被认为是最基本的神经网络构建模块之一。感知器将数据向量作为输入,计算出一个输出值。在MLP中,许多感知器被分组,以便单个层的输出是一个新的向量,而不是单个输出值。在PyTorch中,只需设置线性层中的输出特性的数量即可完成。MLP的另一个方面是,它将多个层与每个层之间的非线性结合在一起。MLP可以添加第二个线性层和允许模型学习一个线性分割的的中间表示——该属性的能表示一个直线(或更一般的,一个超平面)可以用来区分数据点落在线(或超平面)的哪一边的。学习具有特定属性的中间表示,如分类任务是线性可分的,这是使用神经网络的最深刻后果之一,也是其建模能力的精髓。
1.2卷积神经网络
卷积神经网络是一种深度学习模型,它主要用于处理具有网格结构的数据,例如图像和声音。CNN的设计灵感来源于人类视觉系统的结构,通过一系列卷积层和池化层来提取数据的特征。
2.实现姓氏分类
2.1实验目的
完成带有多层感知机或卷积神经网络的姓氏分类
2.2实验环境
Python 3.6.7
2.3实验流程![](https://img-blog.csdnimg.cn/direct/daca31c6f2504cf987195d8111259cdf.png)
3.具体代码实现
3.1实验预处理
预先定义参数并导入数据集,遍历数据集,统计姓氏以及对应的国家,再据此划分出数据集,验证集以及测试集。
3.2实验训练
3.2.1实验准备
处理文本数据并提取词汇表进行预测,给索引添加标记方便之后的查找。将姓氏字符串转化为一维的编码,为之后的实验处理做准备。加载姓氏数据集,并为训练、验证和测试数据创建分割。最后构建相应的处理器。
3.2.2卷积神经网络
将训练集转化为one-hot编码,构建卷积神经网络模型,包含激活函数,全连接层以及前向传播算法,再定义损失函数以及优化器,用训练集对模型进行迭代训练,记录每一次迭代训练得到的损失值和精确度,保存训练好的模型。用模型对测试集上的数据进行测试,同样记录每一次的损失值和精确度。
正常的迭代过程:
3.2.3多层感知机
将训练集转化为one-hot编码,构建多层感知机模型,需要调用父类的初始化方法,包含全连接层以及前向传播算法,视情况决定是否使用softmax函数,再定义损失函数以及优化器,用训练集对模型进行迭代训练,记录每一次迭代训练得到的损失值和精确度,保存训练好的模型。用模型对测试集上的数据进行测试,同样记录每一次的损失值和精确度。
正常的迭代过程:
3.3实验预后部分处理
3.3.1模型测试
初始化训练字典,跟踪每一次的关键信息。选择可用的设备(GPU或CPU)。加载已作为文件保存的数据集和向量器。创建之前调用的函数对训练集进行训练打印出训练集和验证集的精确值和损失值。用测试集对模型进行测试,输出并保存对应的损失值和精确度。
实验主要过程:
实验结果:
3.3.2姓氏分类
给定姓氏预测其最有可能的国家。将姓氏转化为向量后再转化为张量,通过之前定义的分类器进行预测,获取其最有可能的概率值的类别索引,打印出相关的信息。
正常的实验结果:
4实验小结
本次实验主要是应用多层感知机或者是全神经网络对姓氏进行分类。首先要对输入的数据进行预处理,将数据转化为张量模式以方便处理。再定义所需的模型,损失函数以及优化器,用训练集对模型进行优化,保存模型。再用测试集对模型进行测试,使得可以对模型的效果有了大致的了解。最后将模型投入到实践中,预测给定姓氏所属不同国家的概率。