人工智能实战第六次作业_张绍恺
0.导航
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 人工智能实战 |
这个作业的要求在哪里 | 人工智能实战第六次作业(个人) |
我在这个课程的目标是 | 开拓视野,积累AI实战经验 |
这个作业在哪个具体方面帮助我 | 通过调整不同参数,研究其对于神经网络性能的影响,加深对神经网络以及其各个参数的理解和认识 |
1.具体作业内容
- a. 将模型准确度调整至>97%
- b. 整理形成博客,博客中给出参数列表和对应值
- c. 给出最终的loss下降曲线
- d. 给出最终准确度结果
2.过程及代码
- I.调整隐藏层神经元数量
首先测试隐藏层神经元数量,在此选择了[32, 64, 128]和[12, 32, 64]分别作为第一层和第二层的神经元数量,一共六组进行测试并绘制图表
代码(修改主函数为main函数并且在Test函数后添加返回值返回正确率correct_rate)和结果如下:
def main(LR, NH1, NH2, ME, BS):print("Loading...")learning_rate = LRn_hidden1 = NH1n_hidden2 = NH2n_output = 10dataReader = LoadData(n_output)n_images = dataReader.num_examplen_input = dataReader.num_featurem_epoch =MEbatch_size = BSdict_Param = InitialParameters3(n_input, n_hidden1, n_hidden2, n_output, 2)dict_Param = Train(dataReader, learning_rate, m_epoch, n_images, n_input, n_output, dict_Param, forward3, backward3, update3, batch_size)SaveResult(dict_Param)correct, num_images = Test(dataReader, n_output, dict_Param, n_input, forward3)return correct/num_imagesif __name__ == '__main__':correct_rate = []n_hidden_list = ["32,16","64,16","128,16","64,32","128,32","128,64"]correct_rate.append(main(0.2, 32, 16, 2, 10))correct_rate.append(main(0.2, 64, 16, 2, 10))correct_rate.append(main(0.2, 128, 16, 2, 10))correct_rate.append(main(0.2, 64, 32, 2, 10))correct_rate.append(main(0.2, 128, 32, 2, 10))correct_rate.append(main(0.2, 128, 64, 2, 10))plt.figure()plt.plot(n_hidden_list, correct_rate)plt.xlabel("n_hidden") plt.ylabel("correct_rate")plt.show()
最高点是n_hidden1=64, n_hidden2=32的时候,结果为rate=9645 / 10000 = 0.9645,而n_hidden1=128, n_hidden2=64时结果为rate=9630 / 10000 = 0.963
可见隐藏层的神经元数量有时候并非越多越好,而可能在某个区间内有最佳效果,过犹不及
- II.调整学习率
注意到初始化会影响没次试验的结果,因此需要排除初始化的影响
其实做第一步调n_hidden参数的时候就发现这个问题了,但是因为初始化的参数本身就有n_hidden参与所以以我的水平暂时解决不了这个问题,当然确实经过多次的运行程序得到的结果中64, 32这一组的结果并不一定是最好的,有时候128, 64更好,还有时候甚至128, 32甚至128, 16之类的都作为某次测试的最佳结果出现过,我们姑且先用128, 64来做吧
改动的代码段如下
def main(LR, NH1, NH2, ME, BS, dP):print("Loading...")learning_rate = LRn_hidden1 = NH1n_hidden2 = NH2# n_output = 10# dataReader = LoadData(n_output)# n_images = dataReader.num_example# n_input = dataReader.num_featurem_epoch =MEbatch_size = BSdict_Param = dP# dict_Param = InitialParameters3(n_input, n_hidden1, n_hidden2, n_output, 2)dict_Param = Train(dataReader, learning_rate, m_epoch, n_images, n_input, n_output, dict_Param, forward3, backward3, update3, batch_size)SaveResult(dict_Param)correct, num_images = Test(dataReader, n_output, dict_Param, n_input, forward3)return correct/num_imagesif __name__ == '__main__':n_output = 10dataReader = LoadData(n_output)n_images = dataReader.num_examplen_input = dataReader.num_featuredP = InitialParameters3(n_input, 128, 64, n_output, 2)correct_rate = []learning_rate_list = [0.05, 0.1, 0.2, 0.4, 0.8]for i in range(5):correct_rate.append(main(learning_rate_list[i], 128, 64, 2, 10, dP))plt.figure()plt.plot(learning_rate_list, correct_rate)plt.xlabel("learning_rate")plt.ylabel("correct_rate")plt.show()
结果如下图
代码连续运行两次得到的结果图相等,说明基本能排除随机初始化带来的干扰(之后经过多次测试发现仍有小概率产出不同的结果图,按理说因为每次随机种子可能不一样所以数值会不一样,但每个点的大小关系应该不会变才对,然而事实上却并非如此,至于原因就不得而知了Orz)
接着缩小学习率范围提高精度,得到结果如图
learning_rate_list = [0.2, 0.3, 0.4, 0.5, 0.6]
learning_rate_list = [0.2, 0.25, 0.3, 0.35, 0.4]
因此基本可以认定学习率为0.3时,有最佳的结果
- III.调整batch_size
用同样的方式修改代码
if __name__ == '__main__':n_output = 10dataReader = LoadData(n_output)n_images = dataReader.num_examplen_input = dataReader.num_featuredP = InitialParameters3(n_input, 128, 64, n_output, 2)correct_rate = []batch_size_list = [2, 5, 10, 20, 30]for i in range(5):correct_rate.append(main(0.3, 128, 64, 2, batch_size_list[i], dP))plt.figure()plt.plot(batch_size_list, correct_rate)plt.xlabel("batch_size")plt.ylabel("correct_rate")plt.show()
结果如图
看起来主要影响力在于梯度下降速度和平滑程度的batch_size在足够大之后并不怎么影响最终结果,所考虑使用20作为batch_size的最终值
- IV.调整max_epoch
代码如下
if __name__ == '__main__':n_output = 10dataReader = LoadData(n_output)n_images = dataReader.num_examplen_input = dataReader.num_featuredP = InitialParameters3(n_input, 128, 64, n_output, 2)correct_rate = []m_epoch_list = [1, 2, 5, 10, 20, 30]for i in range(5):correct_rate.append(main(0.3, 128, 64, m_epoch_list[i], 20, dP))plt.figure()plt.plot(m_epoch_list, correct_rate)plt.xlabel("m_epoch")plt.ylabel("correct_rate")plt.show()
结果如下
可以看出随着max_epoch值的增大,准确率随之提升,但是准确率提升的幅度却在下降,因此可以认为当max_epoch取得一个值后,之后再提升所带来的准确率提升效益过低,结合本次实验的结果,可以认为max_epoch取值为20时可以在不影响运行速度的情况下取得最佳的结果
3.最终结果显示
根据上述实验结果得出结论,各个参数在达到以下值时,准确率有最佳的结果
learning_rate = 0.3n_hidden1 = 128n_hidden2 = 64m_epoch = 20batch_size = 20
将这些值带入原代码中运行得到最终的结果
rate=9825 / 10000 = 0.9825
其Loss曲线为
转载于:https://www.cnblogs.com/ineffable-sk/p/10751205.html
人工智能实战第六次作业_张绍恺相关推荐
- 2019人工智能实战 第六次作业 段峙宇
项目 内容 课程内容 2019人工智能实战 作业要求 第六次作业 课程目标 将模型准确度调整至>97% 并给出最终loss曲线 本次作业的帮助 了解各项参数对训练准确性的影响程度 1.调节epo ...
- 人工智能实战第六次作业-尹正超
作业六 项目 内容 这个作业属于哪个课程 人工智能实战 这个作业的要求在哪里 第六次作业 我在这个课程的目标是 学习算法,积累项目经验,锻炼coding能力 这个作业在哪个方面帮助我实现目标 了解三重 ...
- 人工智能实战第三次作业_尹正超
作业三:使用minibatch的方式进行梯度下降 项目 内容 这个作业属于哪个课程 人工智能实战 这个作业的要求在哪里 第三次作业-使用minibatch的方式进行梯度下降 我在这个课程的目标是 学习 ...
- 人工智能实战小程序之语音_前端开发
1. 人工智能实战小程序之准备工作 2. 人工智能实战小程序之语音_前端开发 今天这部分主要讲小程序前端功能的开发 由于我偏后端,css是我的弱项,可能很多人和我一样开发小程序不知道如何下手,希望本篇 ...
- 人工智能实战第三次作业 焦宇恒
项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 作业要求 我在这个课程的目标是 学会人工智能基本算法 这个作业在哪个具体方面帮助我实现目标 使用minibatch的方法进 ...
- 人工智能实战2019 第二次作业 焦宇恒
标题 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 作业要求 这个作业关于什么 双变量的反向传播 参考文献 参考文献 实验代码 w = 3 b = 4 delta_z = 1 ...
- 人工智能实战 第四次作业(DEBUG4FUN团队)
项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 第四次作业--第一部分(团队) 队伍名称 Debug4FUN 队伍组成 王俊杰.何峥.段峙宇.田博.张有驰.杨佳宁 作业内 ...
- 人工智能实践——第六周作业【使用fashion_mnist数据集并进行图像化和优化】
课后练习: 题目一:改为fashion_mnist数据集 数据集 题目二:显示y_train[0] ( 文本) 和 和 x_train[0] ( 文本和图片) 题目三:改变网络层数和各层神经元数: 1 ...
- 人工智能实战_第八次作业_手写数学式子识别_廖盈嘉
第8次作业:手写数学式子识别 项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 人工智能实战第八次作业 我在这个课程的目标是 学会.理解和应用神经网络知识来完成一个app ...
- 人工智能实战_第三次作业_陈泽寅
第三次作业:使用minibatch的方式进行梯度下降 一.简要概述 项目 内容 课程 人工智能实战2019 作业要求 作业要求 我在这个课程的目标是 了解人工智能理论,提升coding能力 这个作业在 ...
最新文章
- 终端下中文乱码解决方法
- Java远程方法调用
- SpringBoot防XSS攻击
- axure中备注线_1分钟K线、日K线、月K线……不同周期的K线图到底有啥用?
- ul在Firefox和IE下的不同表现
- Linux下安装Mysql详解
- Hans Berger脑电图之父的人生摘要
- markdown如何调整行距_Markdown基础语法
- CentOS 7 从本地 ISO 映像文件安装 Gnome GUI
- R语言基础编程技巧汇编 - 13
- Linux 之 开机自启动
- ASF 董事会是如何炼成的?
- surfer10与Arcgis10.3 完美生成等值线和等值面方法
- 2010年《杨卫华谈微博架构》视频摘抄
- 程序员的算法趣题Q13: 满足字母算式的解法
- 三星平板 N8000刷机升级安卓版本到7.1过程记录
- 乌云镜像站搭建之图片无法加载问题
- 每日基础知识学习day1
- 三菱伺服放大器内部故障及处理方法
- python双等号是什么意思_python中等号是什么意思?
热门文章
- 审稿较快的2区计算机sci期刊,哪些SCI期刊的审稿速度快
- 浅析三点SEO理论到底带给了我们什么
- html表格左边锁定,表头锁定
- Java开发全终端实战租房项目——项目介绍以及开发后台系统
- 前端要点总结1(2021-12)
- bootstrap必填红心_bootstrap如何设置表单必填
- 如何对全站进行死链接检测?
- docker push received unexpected HTTP status: 503 Service Unavailable
- sagemath matlab,sagemath 是否真的好用?还是隐藏了大坑?
- 基于DirectShow实现的视频捕捉与采集