随着谷歌对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)微软认知工具包后端

使用Keras开发的代码都可以在三个后端上运行,无需修改。
image.png

1.2Keras特性

  • 可在CPU,GPU上无缝切换运行
  • 支持任意网络架构(多输入模型、多输出模型、层共享、模型共享等)


2.Keras开发

2.1定义模型

Keras中定义模型有两种方法:

  • 使用Sequential类,仅用于层的线性堆叠,网络只有一个输入一个输出。
  • 函数式API,可用于构建任意形式的架构。适用于多输入模型、多输出模型和类图模型。

对模型进行编译、训练和评估时,函数式API和Sequential模型是相同的。
image.png
image.png

2.2函数式API

  • 函数式API就是把层当做函数来使用,接收张量并返回张量。
  • 对于多输出模型(多头),需要对各个头指定不同的损失函数,最终合并这些损失函数得到全局损失;由于不同的损失函数的损失值有不同的取值范围,即各个损失函数对全局损失的贡献不同,因此需要根据其取值范围对各个损失函数加上权重以平衡损失贡献。
  • 函数式API中,可以多次重复使用同一个层实例,这意味着每次调用都可以重复使用相同的权重,共享相同的表示。
  • 函数式API中,可以多次重复使用模型实例,就是在重复使用模型的权重,共享相同的表示。

    2.3回调函数

    训练模型时,可以使用回调函数控制模型内部过程。Keras有内部的回调函数,也可以自定义。
    回调函数调用的时间点有:每轮次(epoch)训练开始时、结束时;处理每个批量(batch)之前/后;训练开始时、结束时。
    回调函数的用法包括:

  • 设置模型检查点(checkpoint)。

在不同的时间点保存模型的当前权重。

  • 提前终止训练(early stopping)。

当验证损失不再改善时,为了防止过拟合,就中断训练。

  • 在训练过程中动态调整参数,e.g.动态调整学习率。
  • 在训练过程中记录训练指标和验证指标,将模型学到的表示可视化。