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

人工智能实战第六次作业_张绍恺相关推荐

  1. 2019人工智能实战 第六次作业 段峙宇

    项目 内容 课程内容 2019人工智能实战 作业要求 第六次作业 课程目标 将模型准确度调整至>97% 并给出最终loss曲线 本次作业的帮助 了解各项参数对训练准确性的影响程度 1.调节epo ...

  2. 人工智能实战第六次作业-尹正超

    作业六 项目 内容 这个作业属于哪个课程 人工智能实战 这个作业的要求在哪里 第六次作业 我在这个课程的目标是 学习算法,积累项目经验,锻炼coding能力 这个作业在哪个方面帮助我实现目标 了解三重 ...

  3. 人工智能实战第三次作业_尹正超

    作业三:使用minibatch的方式进行梯度下降 项目 内容 这个作业属于哪个课程 人工智能实战 这个作业的要求在哪里 第三次作业-使用minibatch的方式进行梯度下降 我在这个课程的目标是 学习 ...

  4. 人工智能实战小程序之语音_前端开发

    1. 人工智能实战小程序之准备工作 2. 人工智能实战小程序之语音_前端开发 今天这部分主要讲小程序前端功能的开发 由于我偏后端,css是我的弱项,可能很多人和我一样开发小程序不知道如何下手,希望本篇 ...

  5. 人工智能实战第三次作业 焦宇恒

    项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 作业要求 我在这个课程的目标是 学会人工智能基本算法 这个作业在哪个具体方面帮助我实现目标 使用minibatch的方法进 ...

  6. 人工智能实战2019 第二次作业 焦宇恒

    标题 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 作业要求 这个作业关于什么 双变量的反向传播 参考文献 参考文献 实验代码 w = 3 b = 4 delta_z = 1 ...

  7. 人工智能实战 第四次作业(DEBUG4FUN团队)

    项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 第四次作业--第一部分(团队) 队伍名称 Debug4FUN 队伍组成 王俊杰.何峥.段峙宇.田博.张有驰.杨佳宁 作业内 ...

  8. 人工智能实践——第六周作业【使用fashion_mnist数据集并进行图像化和优化】

    课后练习: 题目一:改为fashion_mnist数据集 数据集 题目二:显示y_train[0] ( 文本) 和 和 x_train[0] ( 文本和图片) 题目三:改变网络层数和各层神经元数: 1 ...

  9. 人工智能实战_第八次作业_手写数学式子识别_廖盈嘉

    第8次作业:手写数学式子识别 项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 人工智能实战第八次作业 我在这个课程的目标是 学会.理解和应用神经网络知识来完成一个app ...

  10. 人工智能实战_第三次作业_陈泽寅

    第三次作业:使用minibatch的方式进行梯度下降 一.简要概述 项目 内容 课程 人工智能实战2019 作业要求 作业要求 我在这个课程的目标是 了解人工智能理论,提升coding能力 这个作业在 ...

最新文章

  1. 终端下中文乱码解决方法
  2. Java远程方法调用
  3. SpringBoot防XSS攻击
  4. axure中备注线_1分钟K线、日K线、月K线……不同周期的K线图到底有啥用?
  5. ul在Firefox和IE下的不同表现
  6. Linux下安装Mysql详解
  7. Hans Berger脑电图之父的人生摘要
  8. markdown如何调整行距_Markdown基础语法
  9. CentOS 7 从本地 ISO 映像文件安装 Gnome GUI
  10. R语言基础编程技巧汇编 - 13
  11. Linux 之 开机自启动
  12. ASF 董事会是如何炼成的?
  13. surfer10与Arcgis10.3 完美生成等值线和等值面方法
  14. 2010年《杨卫华谈微博架构》视频摘抄
  15. 程序员的算法趣题Q13: 满足字母算式的解法
  16. 三星平板 N8000刷机升级安卓版本到7.1过程记录
  17. 乌云镜像站搭建之图片无法加载问题
  18. 每日基础知识学习day1
  19. 三菱伺服放大器内部故障及处理方法
  20. python双等号是什么意思_python中等号是什么意思?

热门文章

  1. 审稿较快的2区计算机sci期刊,哪些SCI期刊的审稿速度快
  2. 浅析三点SEO理论到底带给了我们什么
  3. html表格左边锁定,表头锁定
  4. Java开发全终端实战租房项目——项目介绍以及开发后台系统
  5. 前端要点总结1(2021-12)
  6. bootstrap必填红心_bootstrap如何设置表单必填
  7. 如何对全站进行死链接检测?
  8. docker push received unexpected HTTP status: 503 Service Unavailable
  9. sagemath matlab,sagemath 是否真的好用?还是隐藏了大坑?
  10. 基于DirectShow实现的视频捕捉与采集