【导读】我们在上一节的内容中已经为大家介绍了台大李宏毅老师的机器学习课程的backpropagation,这一节将主要针对深度学习的简单实践展开分析。本文内容涉及机器学习中深度学习简单实践的若干主要问题:Keras, 手写数字辨识网络设计、网络的尝试改进。话不多说,让我们一起学习这些内容吧。
课件网址:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html
视频网址:
https://www.bilibili.com/video/av15889450/index_1.html
李宏毅机器学习笔记8“Hello World” ofDeep Learning
在我们最开始学习c语言的时候,第一个程序自然是hello world程序,deep learning中也有类似的程序—mnist手写数字辨识。因为deep learning最终是用于工程实现,所以亲自动手实现很重要,在实际操作中,会遇到种种问题,因为deep learning要是做好的话远没有那么简单。
1. keras
深度学习操作平台有很多,之前已有提到,我们这里使用keras
下面是关于keras一些信息
Keras看起来貌似是很高级的东西,但它实际的操作过程类似搭积木
2.手写数字辨识网络设计
手写数字辨识做的是输入手写数字的图片,机器要辨识它是哪个数字,类似一个多分类问题
我们先定义loss function,用交叉熵表示损失函数,梯度下降方法采用adam
然后准备训练集,定义batch size(100),epoch(20)等值,输入、输出图片表示为numpy array的形式,输入数组维度为2维,第一维为输入个数,第二维为输入维度(784),输出数组维度也是2维,第一维是输出个数,第二维是输出维度(10)。
Batch指的每次做梯度下降取的训练图片,batch size告诉batch有多大,一个batch更新一次参数,所有batch全被挑选称为一次epoch。
当batch size为1时,就成了Stochastic gradient descent
更小尺寸的batch自然意味着在每个epoch中更新参数次数越多,但并非batch越小效率越高,因为由于平行运算,计算10个example的时间和计算一个example的时间几乎是一样的。Batch size太大,取得的效果也很差。
然后我们继续建立各个网络层
最后输出结果
3. 尝试改进
从上图可以看出正确率只有11%,很令人失望。
是不是隐藏层神经元太少了导致的,将Units由633改为689后
正确率0.2166,依然很差
Emmm,是不是神经网络太浅了导致的,隐藏层加为10层
最后结果又是0.11,很难受
正确改进方法下次再说
领取专属 10元无门槛券
私享最新 技术干货