https://www.bilibili.com/video/av64970827/?p=7
tf2.0主要使用tf.keras api来构建模型,主要包括如下几个部分
一、Layers
如下是一些特性,比如可以运行在eager 或 graph模式,支持type checking等。
不支持的特性
没听太懂(挖坑)
一个典型的basic layer
一个更实用的写法,不需要在初始化时定义输入维度,当第一次call时,会在build时根据input_shape,add_weight来构建权重,
以后call时就可以reuse weights了。
Layer中可以有non-trainable weights,比如bn层
layer也可以nested化
一个训练实例,没有了session,graph,比tf1简单顺眼多了
定义了一个额外的损失,可以通过model.losses得到。
layers serializable
以字典的形式保存模型,不保留权重
call中有个参数train
二、Model
和nested layer相比,只需要继承的类更改一下。不过增加了更多功能,compile,fit,evaluate,save。
在实际使用时,layer通常表示某层或某个block,model表示一个完整的模型(需要train,predict等)
fit,evaluate默认是graph execution(更快),也可以制定eager 模式
三、Functional Models
一种更简单直接的方式(下图中的x是某种输入,不是layer) ,更适用于使用者,而不是开发者
没看懂_keras_histor的作用(挖坑)
Function API 包括如下特性
(1)check
通过InputSpec来进行检查,在init中会给一个简单的check,当第一次调用时,在build中,会进行更详细的check。
(2)save
支持跨平台。
(3)plot model
(4)设计到nlp,不懂
(5)使用dynamic layers
如对bn层,train 和Inference时的不同处理