包含了通过子类化定义特殊layer和model, 自定义损失函数, 自定义初始化器, 自定义正则化器以及正则化工作原理, 自定义约束器, 自定义优化器

1. layer 与 model

tf 有一套非常灵活的搭建网络的方案, 层(layer)和模型(model)没有显著的区分, 他们的本质都是一个输入张量输出张量的特殊函数对象, 交付给tf训练的对象是model, 它比layer多了一些特性和方法, tf灵活的地方在于, 一个或者数个layer可以轻易的封装成一个model, model也可以被封装成一类特殊的layer(Functional层)使用, 在自定义复杂的层或者模型时, 往往不会严格的区分层与模型, 他们可以在函数式搭建时灵活的拼接在一起. 值得注意的是在通过Functional API搭建网络时, tf的基础数学运算(比如矩阵的线性运算, 三角函数之类)也会被包装成一类特殊的layer(TensorFlowOpLayer)
tf中两个核心的类Layer类和Model类, 他们具有大部分相同的API, 但是有如下的区别:

  • Model类会公开训练, 测试和评估的方法(model.fit(), model.predict(), model.evaluate())
  • Model类具有model.layer属性, 用以展开内部的层列表
  • Model类公开了保存模型用的API, (model.save(),model.save_weights())

    1.2 自定义layer

    自定义一个layer需要定义一继承了keras.layers.Layer类的新类, 然后重写它的init(), call(), bulie(), get_config()等方法.