GitHub | 您所在的位置:网站首页 › 嘴贱的人性格怎么改变自己 › GitHub |
2022人工智能安全课程作业,内容是使用SVHN数据集进行识别练习
使用训练/测试数据集
SVHM(Street View House Number),这是一个基于实拍图片制作而成的数字识别数据集。其风格与MNIST数据集相似,每张图像中是裁剪后获得的一个数字,并且是数字0-9相关的十分类,但整个数据集支持识别、检测、无监督三种任务。同时,虽然是实拍数据集,但SVHN识别集的图像被处理得很小(尺寸为32x32,通道为3),样本量也在10万左右,可以在CPU上实现迭代,是非常适合用来走完整流程的数据集。 (存在问题:虽然图片中数字都基本在正中央,但是数据集的分辨率很低,识别起来有一定的难度) 网络架构分别基于两个很经典的架构,Vgg和残差神经网络(ResNet),利用他们比较浅但是学习能力又比较强的特点来构筑自己的架构。由于这两个原始架构是在ImageNet数据集上构建的,图像的尺寸、输入、输出都发生了变化,需要自己重新调整。自己构建的两个架构取名为MyResNet和MyVgg。 提前停止在本神经网络中,规定当连续n次迭代中损失函数的减小值都低于阈值tol时,将学习率进行衰减,并且设置“连续n次”中的“n”这个超参数为5。同时,损失函数的减小值并不是在这一轮迭代和上一轮迭代中进行比较,我们需要让本轮迭代的损失与历史迭代最小损失比较,如果历史最小损失 - 本轮迭代的损失 > tol,我们才认可损失函数减小了。这种设置对于不稳定的架构不太友好,如果我们发现模型不稳定,则可以设置较小的阈值。 训练/测试/监控/保存权重/绘图在函数fit_test中,整合了这些所有流程,方便调用。其中相关参数说明如下: net: 实例化后的网络 batchdata:使用Dataloader分割后的训练数据 testdata:使用Dataloader分割后的测试数据 criterion:所使用的损失函数 opt:所使用的优化算法 epochs:一共要使用完整数据集epochs次 tol:提前停止时测试集上loss下降的阈值,连续5次loss下降不超过tol就会触发提前停止 modelname:现在正在运行的模型名称,用于保存权重时作为文件名 PATH:将权重文件保存在path目录下 模型选择和结果评估当所有准备工作都完成后,我们开始进入模型选择的阶段。在这里我们让两个不同的架构(MyResNet和MyVgg)分别运行5次,每次迭代3个epochs,以此来观察两个架构的稳定性及潜力。以下是在我自己电脑的GPU上分别的运行情况(前一个是MyResNe,后一个是MyVgg):
模型调优是在神经网络上不断尝试、观察现象并被动地做出调整的过程。在这个过程中,我们基本遵循以下思路:
1、首先增加迭代次数,观察训练集和测试集上的损失是否都呈现为下降趋势;
2、如果呈现下降趋势,则需要增加训练次数,把模型训练至测试集的损失不再下降为止(触发提前停止) 如果不呈现下降趋势(欠拟合),可能需要立刻更换架构,直到损失呈现下降趋势为止;
3、当测试集损失不再下降时,停止训练并观察模型的情况,针对现存的问题对症下药 例如,模型过拟合,就采取防止过拟合的操作。模型不稳定,就分析具体原因,让模型变得稳定;
4、如果“对症下药”的所有操作不能够再次提升测试集上的准确率 则必须考虑重做数据上的特征工程、引
入论文中的各项技术、或更换更强大的架构。
尝试就残差网络增加更多的epochs进行训练,比如迭代10个epochs,可以得到如下结果:
|
CopyRight 2018-2019 实验室设备网 版权所有 |