随着谷歌对Keras的收购,Keras库2.3.0版本后将不再进行更新,应当使用tf.keras而不是使用pip安装的Keras.
1.Keras简介
1.1Keras介绍
Keras是一个模型级的库,即它为神经网络提供了高层次的构建模块,并不参与低层次的运算(例如:张量操作、求微分等)。
低层次的运算是通过Keras后端引擎(backend engine)来完成,目前Keras有三个后端引擎,它们都可以无缝嵌入Keras:
- TensorFlow后端
- Theano后端
- CNTK(Microsoft cognitive toolkit)微软认知工具包后端
1.2Keras特性
- 可在CPU,GPU上无缝切换运行
- 支持任意网络架构(多输入模型、多输出模型、层共享、模型共享等)
2.Keras开发
2.1定义模型
Keras中定义模型有两种方法:
- 使用Sequential类,仅用于层的线性堆叠,网络只有一个输入一个输出。
- 函数式API,可用于构建任意形式的架构。适用于多输入模型、多输出模型和类图模型。
对模型进行编译、训练和评估时,函数式API和Sequential模型是相同的。
2.2函数式API
- 函数式API就是把层当做函数来使用,接收张量并返回张量。
- 对于多输出模型(多头),需要对各个头指定不同的损失函数,最终合并这些损失函数得到全局损失;由于不同的损失函数的损失值有不同的取值范围,即各个损失函数对全局损失的贡献不同,因此需要根据其取值范围对各个损失函数加上权重以平衡损失贡献。
- 函数式API中,可以多次重复使用同一个层实例,这意味着每次调用都可以重复使用相同的权重,共享相同的表示。
函数式API中,可以多次重复使用模型实例,就是在重复使用模型的权重,共享相同的表示。
2.3回调函数
训练模型时,可以使用回调函数控制模型内部过程。Keras有内部的回调函数,也可以自定义。
回调函数调用的时间点有:每轮次(epoch)训练开始时、结束时;处理每个批量(batch)之前/后;训练开始时、结束时。
回调函数的用法包括:设置模型检查点(checkpoint)。
在不同的时间点保存模型的当前权重。
- 提前终止训练(early stopping)。
当验证损失不再改善时,为了防止过拟合,就中断训练。
- 在训练过程中动态调整参数,e.g.动态调整学习率。
- 在训练过程中记录训练指标和验证指标,将模型学到的表示可视化。