台大李宏毅Machine Learning 2017Fall学习笔记 (9)Keras
本节课主要讲述了如何利用Keras搭建深度学习模型。Keras是基于TensorFlow封装的上层API,看上去要好用不少啊~~~
用Keras搭建深度学习法模型类似搭积木,直接贴PPT了。
Step 1: Define a set of function
上图中
model=Sequential()
的作用是宣告一个model,
Dense
表示全连接层。激活函数的选择很多除了sigmoid外,还有softmax、softsign、relu、tanh、hard_sigmoid和linear.
Step 2: Goodness of function
上图中,损失函数采用交叉熵函数。
Step 3: Pick the best function
优化方法有很多,除了adam外,还有SGD、RMSprop、Adagrad、Adadelta、Adam、Adamax和Nadam.(好多竟然是第一次见,我屮艸芔茻。。。。
x_train是二维参数:第1维是有多少个example(比如:有10000张图片);第2维是每张图片有多少个pixel(比如:一张图有784个pixel)。
y_train是二维参数:第1维是有多少个example(比如:有10000张图片);第2维是label向量(手写数字识别是10维的label向量)。
下图形象地展示了两个参数的维度及含义。
Batch的意义
在深度学习的训练过程中,会将一定数量的example组成一个batch送给模型,让其训练,现在详细解释一下。
batch中example的选择是随机进行的,并且是深度学习框架代劳的。自己只需要定义参数就好。
若一个epoch中有100个batch,则一次epoch后会更新100次参数;20次epoch后会更新2000次参数。
若Batch_size=1,则训练的优化算法就成了随机梯度下降(SGD)。
之前的课程中提到过,SGD算法速度较快,采用的较多。那为何不把所有的batch_size都设为1呢?
再说一说batch_size大小对训练过程的影响。
如上图所示,在相同的时间内,batch_size=1或10,在相同时间内更新参数的次数可以认为相同(上图中例均为50000次)。
但是当batch_size=10时,参数更新的更稳定,而且基于并行计算其计算更快,故而把batch_size设为10了。
batch_size更大时,训练速度更快的原因是GPU的并行计算。并行计算主要是针对矩阵运算而言的。
正如上图中所示:SGD和Mini-Batch两种计算方式后者更快。可以认为并行计算10个example和单独计算1个example的时间相同。
既然batch_size越大,计算速度越快,将其设置的无限大行不行?答:不行。原因有二。其一:若batch_size无限大,GPU无法提取运算。虽然并行计算10个和1个时间差不多,但并行计算10000个就和计算1个不一样了…这属于硬件问题;其二:很容易卡到local minima或鞍点位置,导致训练无法进行。
How to use the trained model
后记:不得不说Keras的确容易用好多啊!!!