目录
1. Keras
Keras其实是TensorFlow和Theano的接口。它易于学习,有比较好的弹性。
Kreas在希腊为中是牛角的意思。我们在使用Keras的过程中,只是把现成的函数调用叠加。
- 我们举手写数字识别的例子来初始Keras
Keras同样也是有三个步骤的:
1.1 步骤一:定义一个函数集合
实际上就是决定神经网络长什么样子。如图所示,我们想要创建一个神经网络,有两个隐藏层,每层有500个神经元。
model = Sequential() #首先声明一个模型
model.add() #在模型上加一个东西 Dense()表示全连接层 Activation()表示激活函数
1.2 步骤二:评估函数的好坏
model.compile() #loss = ‘’定义损失是什么(categorical crossentropy表示交叉熵)
1.3 步骤三:找到最好的函数
optimizer = ‘’ #优化器,指用什么方式寻找最好的函数(让机器自己决定学习率是多少)
训练函数,给定4个输入,第一个是训练数据,第二个是标签(训练数据就是手写数据的矩阵,标签10维,表示训练数字是几)
- batch_size
实际上,我们在做深度学习的时候,并不会真的最小化损失值。我们会把训练数据随机分成一个一个的批batch,首先随机初始化网络的参数,接下来随机选择一个批并计算这个批里面的元素的全部损失,然后根据这个损失值去更新参数。接下来随机再选取一个批,再次计算这个批里面元素的全部损失并再次进行参数的更新。反复重复这一步骤,直到所有的批都被选择一次。把所有的批都选择一次称为一个epoch(这里用中文翻译不太准确)。然后我们重复上面的步骤,得到多个epoch。
batch_size = 100 #每个批里面包含100条数据
nb_epoch = 20 #number of epoch共有多少个epoch,即重复多少次批的过程。这里共更新20*100=2000次参数。
当batch_size = 1的时候,就相当于随机梯度下降法。随机梯度下降法的好处是速度比较快。
1.3.1 为什么要用mini-batch
① 速度
批的规模越小意味着我们在一个epoch里面能更新更多次。
例如有50000个数据,把batch_size设为1,那么在一个epoch能更新50000次;把batch_size设为10,那么在一个epoch能更新5000次。
batch_size大小不同运算的时间不同。当batch_size = 10的时候比较稳定,收敛的更快,所以我们选择batch_size = 10比选择随机梯度下降更好。
因为我们使用了平行运算,所以在batch_size设定比较大的时候速度更快。但是又不能把batch_size设定的特别大,因为这样GPU就没办法平行运算,网络有可能会陷入鞍点。
神经网络可以看做是一系列矩阵运算的结果。
为什么mini-batch比随机梯度下降法快呢?原因如下图:
使用model.evaluate()计算模型的准确率,model.predict()使用训练好的模型进行预测。