1、tf模型过程
主要是定义模型的前向反馈过程,接下来介绍如何使用 TensorFlow 快速搭建动态模型。
1)模型的构建: tf.keras.Model 和 tf.keras.layers
2)模型的损失函数: tf.keras.losses
3)模型的优化器: tf.keras.optimizer
4)模型的评估: tf.keras.metrics
2、Keras
Keras 有两个重要的概念: 模型(Model) 和 层(Layer) 。层将各种计算流程和变量进行了封装(例如基本的全连接层,CNN 的卷积层、池化层等),而模型则将各种层进行组织和连接,并封装成一个整体,描述了如何将输入数据通过各种层以及运算而得到输出。在需要模型调用的时候,使用 y_pred = model(X) 的形式即可。Keras 在 tf.keras.layers 下内置了深度学习中大量常用的的预定义层,同时也允许我们自定义层。
Keras 模型以类的形式呈现,我们可以通过继承 tf.keras.Model 这个 Python 类来定义自己的模型。在继承类中,我们需要重写 __init__() (构造函数,初始化)和 call(input) (模型调用)两个方法,同时也可以根据需要增加自定义的方法。
classMyModel(tf.keras.Model):
def__init__(self):
super().__init__()
# Python 2 下使用 super(MyModel, self).__init__()
# 此处添加初始化代码(包含 call 方法中会用到的层),例如
# layer1 = tf.keras.layers.BuiltInLayer(...)
# layer2 = MyCustomLayer(...)
defcall(self,input):
# 此处添加模型调用的代码(处理输入并返回输出),例如
# x = layer1(input)
# output = layer2(x)
# returnoutput
# 还可以添加自定义的方法
图示,其实说到底就两个过程啊:
keras模型类定义示意图更新于20210118:
Keras 模型以类的形式呈现,我们可以通过继承 tf.keras.Model 这个 Python 类来定义自己的模型。在继承类中,我们需要重写 __init__() (构造函数,初始化)和 call(input) (模型调用)两个方法,同时也可以根据需要增加自定义的方法。
其中,__init__() 方法,构造器初始化模型的所有层以及最先涉及到super函数,调用父类方法。
其中,call(input) (模型调用)方法,描述的是如何从输入经过各种层进行输出的过程。
因此,继承 tf.keras.Model 后,我们同时可以使用父类的若干方法和属性,例如在实例化类 model = Model() 后,可以通过 model.variables 这一属性直接获得模型中的所有变量,免去我们一个个显式指定变量的麻烦。
例如一个模型化例子:
虽然模型没有显式建立线性变换,但建立了一个继承了 tf.keras.Model 的模型类 Linear ,这个类在初始化部分实例化了一个 全连接层 ( tf.keras.layers.Dense ),并在 call 方法中对这个层进行调用,实现了线性变换的计算。
小问题:为什么模型类是重载 call() 方法而不是 __call__() 方法?
在 Python 中,对类的实例 myClass 进行形如 myClass() 的调用等价于 myClass.__call__() 。
__call__函数/方法那么看起来,为了使用 y_pred = model(X) 的形式调用模型类,应该重写 __call__() 方法才对呀?
原因是 Keras 在模型调用的前后还需要有一些自己的内部操作,所以暴露出一个专门用于重载的 call() 方法。 tf.keras.Model 这一父类已经包含 __call__() 的定义。 __call__() 中主要调用了 call() 方法,同时还需要在进行一些 keras 的内部操作。这里,我们通过继承 tf.keras.Model 并重载 call() 方法,即可在保持 keras 结构的同时加入模型调用的代码。
2、Keras Pipeline *
首先理解Pipeline,最典型和常用的神经网络结构是将一堆层按特定顺序叠加起来,那么,我们是不是只需要提供一个层的列表,就能由 Keras 将它们自动首尾相连,形成模型呢?大概意思是一个序列的数据处理流程吧。
然后Keras 的 Sequential API 正是如此。通过向 tf.keras.models.Sequential() 提供一个层的列表,就能快速地建立一个 tf.keras.Model 模型并返回:
Sequential API使用 Keras Model 的 compile 、 fit 和 evaluate 方法训练和评估模型
当模型建立完成后,通过 tf.keras.Model 的 compile 方法配置训练过程:
Model 功能模块如果需要显式地声明自己的变量并使用变量进行自定义运算,或者希望了解 Keras 层的内部原理,请参考自定义层。
自定义层:
自定义层需要继承 tf.keras.layers.Layer 类,并重写 __init__ 、 build 和 call 三个方法。
例如,如果我们要自己实现一个本章第一节中的全连接层( tf.keras.layers.Dense ),可以按如下方式编写。此代码在 build 方法中创建两个变量,并在 call 方法中使用创建的变量进行运算:
自定义层todo:
1、动手实现自定义层
2、动手Sequential API
done
参考资料
1、TensorFlow 模型建立与训练 https://tf.wiki/zh_hans/basic/models.html#
2、Sequential API Keras中的Sequential模型和Functional模型区别 https://blog.csdn.net/weixin_38740463/article/details/90479319
网友评论