李宏毅机器学习 P15 “Hello world” of deep learning 笔记

版权声明:站在巨人的肩膀上学习。 https://blog.csdn.net/zgcr654321/article/details/83933918

我们今天使用Keras来写一个deep learning model。

tensorflow实际上是一个微分器,它的功能比较强大,但同时也不太好学。因此我们学Keras,相对容易,也有足够的灵活性。

李教授开了一个玩笑:

下面我们来写一个最简单的deep learning model。

即用keras实现mnist手写体数字识别。(识别手写体的数字0-9)

keras可以直接下载这个数据集。

step1:define a function

step2:决定一个function的好坏。

step3:挑选一个最好的function。

x_train和y_train的样子:

实际训练时我们不是用所有的样本,而是用一个mini-batch大小的随机的样本来训练。

如果mini-batch*iteration=样本的总大小,我们就将这iteration次使用mini-batch训练的过程叫做one epoch。

batch_size即mini-batch的大小。nb_epoch即epoch的次数。

为什么每次训练只用mini-batch个样本?主要是为了提升速度。

batch_size不一样时,一个epoch需要的时间不同。

可以看到batch_size等于1时,完成一次epoch的时间是batch_size=10时的10倍,而且batch_size=10时,loss值下降更加稳定,不容易出现震荡。

另外,batch_size太大时的性能表现也不太好,并且更新一次权重需要很长的时间。同时,有一定大小的batch_size可以保证不会因为随机性太强容易走到某个小的local minima位置上去。

矩阵运算时的情况:

对于上面这个网络:

对GPU来说,让它做上述两个运算,所用的时间几乎是一样的,在矩阵相乘中的每一个元素,都是可以并行运算的,所以上面用的时间会变成下面的两倍,所以GPU+mini-batch会使效率大大提升。

在每个epoch时的minibatch应随机地取保证每次都不一样。

加载和保存模型:

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/83933918