rference: 爬取
使用keras模块主要使用其五个主要模块,为datasets、layers、losses、metrics以及optimizers。
五大模块
datasets:
前文已经提到,封装了一些对常见的小型数据集的预处理(如MNIST),自动下载并处理数据为numpy矩阵。
layers:
在Keras的神经网络模型概念中,网络是可以按照层进行区分的,一层完成一个或者几个张量运算,如卷积层、池化层等。Keras对这些层进行了封装,只要传入张量,则按照层的运算方式输出运算结果张量。
losses:
损失函数及损失函数的优化是神经网络这类端到端模型关注的重点话题,对于不同的任务不同的损失函数会有不同的效果,一个合适的损失函数非常重要,一般的实际任务中需要设计一个很好的损失函数。Keras对于MSE、CE这类常见的损失函数进行了封装,实例化该损失函数则会自动计算loss值。
metrics:
该模块下封装了很多评估类,用于对数值进行评估,如准确率(Accuracy)、均值(Mean)等。
实例化一个指标对象;调用update_state方法传入数值数据;通过调用result方法得到计算到的指标值;调用reset_states方法清除缓存,重新传入数据。
optimizers:
优化器的选择对于神经网络庞大的参数优化问题是非常重要的,在过去的一段时间内SGD(随机梯度下降)就是非常优秀的优化器了,但是SGD有着很多问题,这就有了依据梯度下降思想产生的动量SGD、Adam、RAdam等等后起之秀。当然,对于一个模型优化问题,往往没有最好的只有最合适的优化器,对于有的任务SGD就是最快最好的方法,而对于有的任务RAdam才是合适的选择。
快捷训练
神经网络的训练流程,大致流程如下:
1.传入输入张量
2.进行矩阵运算得到输出张量
3.计算损失并将损失反向传播
4.根据反向传播的梯度值依据梯度更新算法更新参数
5.根据训练好的参数对验证集预测,验证模型预测能力
6.重复上面步骤多次,每次称为一个轮次(epoch)的训练。
显然,这整个过程可以理解为一个端到端的过程,输入张量,输出预测结果。至于中间的张量流动,是个可以进一步封装的整个模型,Keras实现了这个工作,在Keras中,处理这一切运算的模型是由Model类衍生的。
这个model实例主要实现四个方法,compile,fit, evaluate, predict,通过这四个封装的方法完成了很大代码量的神经网络构建和训练过程。
compile方法编译模型,要求至少传入优化器(optimizer)、损失函数(loss function)和评估指标(metrics)。
fit方法训练模型,要求至少传入训练的数据和轮次(epoch)。也可以传入验证数据validation_data和validation_freq,前者表示验证集数据,后者表示多少个epoch进行一次验证集测试。
evaluate方法要求输入验证数据集的x和y,然后按照模型编译指定的metrics给出预测的结果评估。
predict方法要求输入测试集的x,根据训练好的网络参数返回模型的预测结果。