畅游人工智能之海--Keras教程之Sequential模型篇
畅游人工智能之海--Keras教程之Sequential模型篇
各位读者大家好,今天我们就要开始正式地进行Keras的学习了。相信大家都读过了Keras的知识结构那篇文章,我们把Keras的模型讲解放在了最前面。这样布局是为了让大家先对Keras实现神经网络的整体架构了然于胸,在之后的学习中便可以找到其他的零碎知识点在框架中的位置,更有利于大家对Keras的学习。废话不多说,下面我们就开始吧!
Sequential模型,顾名思义,它是一个线性模型,即多个网络层进行线性堆叠构成Sequential模型。Sequential模型的构造方法有两种:一种是将网络层实例的列表传递给Sequential的构造器来创建一个Sequential模型;另一种是使用.add()方法将各层添加到模型中。
1 | #方法一 |
这样,一个简单的模型就搭好了。但是这样的模型是没有经过训练的,无法完成我们想要的功能。若是想对模型进行训练,我们还需要选择优化器、loss函数、评估标准等,使用compile方法对模型进行配置。之后才能使用训练数据对模型进行训练。
在这之前,模型需要知道它所期望的输入的尺寸(只需要告诉第一层输入尺寸信息,之后的层会自行推导。有以下几种方法完成这一任务:①使用input_shape参数传递给第一层,它是一个表示尺寸的元组;②某些2D层支持通过参数input_dim输入尺寸,某些3D时序层支持input_dim和input_length参数。如果想要为输入指定固定的batch大小,可以传递batch_size参数给一个层。下面两行代码是等价的。
1 | model.add(Dense(32, input_shape=(784,))) |
上面提到,我们在训练模型之前需要用compile方法对学习过程进行配置,基本的代码如下:
1 | model.compile(optimizer='rmsprop', |
optimizer就是优化器,loss就是损失函数,metrics就是评估标准。通过输入等号后面的内容可以针对不同的训练任务进行不同的选择。
在完成配置过程之后,我们便可以用fit方法对模型进行训练。代码如下:
1 | model.fit(data, labels, epochs=10, batch_size=32) |
其中data就是训练集,labels是对应的标签,epochs是训练轮数,batch_size是批大小。
除了上面提到的这些,Sequential模型还有一些其他的API(具体参数含义可以查看Keras文档):
1 | #根据名称(唯一)或索引值查找网络层,如果同时提供了 name 和 index,则 index 将优先。 |
接下来,我们来结合一个实例来梳理一下Sequential模型整体流程,以基于多层感知器的二分类为例。
1 | import numpy as np |
以上就是一个基本流程,关键点在注释里标注。
接下来大家会想,我们辛辛苦苦训练好了一个模型难道程序结束就没有了么?所以我们要采取一些方法保留模型,Keras提供了一些方法。
最完整的保存方法为model.save(filepath),这个方法将Keras模型保存到单个HDF5文件中,该文件包括:模型的结构,允许重新创建模型;模型的权重;训练配置项(损失函数,优化器);优化器状态,允许准确地从你上次结束的地方继续训练。之后还可以使用keras.models.load_model(filepath)重新实例化模型。还有只保存或加载模型的结构的方法:model.to_json(),model.to_yaml();model_from_json(json_string),model_from_yaml(yaml_string)。还有只保存或加载模型的权重的方法:model.save_weights(filepath);model.load_weights(filepath)
相信如果你能掌握这篇文章的内容,就可以自行构造一个Sequential模型啦!关于优化器等等关键参数的选择背后也有很深的学问,这关系到大家处理具体问题时的选择,希望大家在这篇文章之外多多去探索他们背后的学问,一起加油吧!