准备工作:1. 安装jupyter notebook, 教程:http:///article/getting-started-with-jupyter-notebook-part-1/ 2. 一台配置高点的电脑,这个还是有必要投入一些的,不然每次做练习都要等上很长时间,我在公司的电脑大概做完这个训练要10秒左右,回家后的电脑要130秒左右。这还是一次训练的时间,后面做优化还需要训练超参数与多种模型对比,总不能每次都多等待10几倍的时间吧,程序员最忍受不了的就是无效的等待时间。 之前看机器学习界女神级的人物李飞飞的课程,里面专门介绍她用的电脑,可见牛人对电脑的要求是非常高的,下面看一张电脑配置的图片: CPU: intel core i7-7700k 4.4G 内存:4X8G 显示卡: 两个NV GTX 1070 硬盘: HDD一个, SSD两个 这里多唠两句嗑儿,在技术装备上千万不要舍不得花钱,用2万多的电脑去学习心态都不一样,心里会想“这么贵的电脑,要多用几次啊,不能闲置在那儿浪费了,多做练习,多码代码”,多练习恰恰就是你是否能学习成功的关键,要用任务去驱动自己,积极主动的去学习。要记住一点,现在花的钱以后都会十倍,百倍的挣回来。 (当然我不是推销卖电脑的,只是传达一种理念) 引用:我们要用到的是Michael Nielsen的例子,github地址:https://github.com/mnielsen/neural-networks-and-deep-learning 采用的数据集就是著名的“MNIST数据集”。它的收集者之一是人工智能领域著名的科学家——Yann LeCu。这个数据集有60000个训练样本数据集和10000个测试用例。运用本文展示的单隐层神经网络,就可以达到96%的正确率。 举例:首先回顾一下机器学习的过程:
用一张图片来表示 其中生成模型这一步非常重要,它并不是一下就生成好了,是调整神经网络的权重和偏移,取训练中误差非常低的那个,这里就联系到之前讲的“最小二乘法”的相关概念。 注意训练集的数据会反复用,但是测试集的数据只会执行一次。可能会生成多个模型误差都很小,这时候就用测试集来比较,挑选出测试集误差最小的模型。 代码:不要紧张老铁,代码总共5行,还是算上两行import的代码的情况下。 import mnist_loader import network training_data, validation_data, test_data = mnist_loader.load_data_wrapper() net = network.Network([784, 30, 10]) net.SGD(training_data, 30, 10, 3.0, test_data=test_data) 解释一下:
什么是超参数呢?超参数是影响所求参数最终取值的参数,是机器学习模型里面的框架参数,可以理解成参数的参数,它们通常是手工设定,不断试错调整的,或者对一系列穷举出来的参数组合一通进行枚举(网格搜索)来确定。 打开jupyter notebook进入到下载的github代码文件夹,再进入src的文件夹,创建一个空白的python2.7的notebook,把代码一个字一个字的打进去,打的时候想想上面的注释内容,千万别粘贴,丢面儿,就5行代码而已。打完后直接运行就可以看到输出结果,下面是我刚打的,热乎乎: 启发式理解这个我还是听寒老师讲的,我觉得非常形象很容易理解,先看一张图片:
如果这四个节点的值都很高,说明这四个区域同时满足这些特征。将以上的四个部分拼接起来,我们会发现,输入样本很可能就是一个手写“0”! 因此,同一层的几个神经元同时被激活了意味着输入样本很可能是某个数字。 当然,这只是对神经网络作用机制的一个启发式理解。真实的过程却并不一定是这样。但通过启发式理解,我们可以对神经网络作用机制有一个更加直观的认识。 总结:通过今天的5行代码,可以算是自己在机器学习界的 “Hello world”。重点是理解机器学习的工作流程,以及神经网络作用机制。 |
|