本文將介紹tf.kears API的使用方法以及它的實現方法,主要參考keras作者對keras的介紹(需要科學上網)。包括:
- Keras Architecture keras的結構
- Layers 和 Models 兩個類
- 函數式模型 functional models
- 函數式模型的特徵 features to functional models
- 訓練和推理 Training & Inference
- 損失函數和性能評價指標 losses & metrics
以上部分寫英文是爲了看tensorflow官網時方便對應中英文
一、keras結構概述
主要包括keras的子模塊和類。
- Engine(模型定義和推理,model define & execution) 基本類:
-
- 基礎類Layer:是定義各種layer的基礎
-
- 基礎類Network:定義網絡結構
-
- 基礎類Modle:Network+training/eval loops
-
- 基礎類Sequential:序列模型是Model的一種
- Layers:
-
- 各種Layer的子類subclasses
- Losses,Metrics:
-
- 基礎類Metric
-
- 基礎類Loss
-
- 各種Metric & Loss的子類,可用於不同的需求
- 回調callbacks:
-
- 基礎類Callback
-
- 各種Callback的子類,可用於不同的需求
- 優化器Optimizers:
-
- 基礎類Optimizer
-
- 各種Optimizer的子類,可用於不同的需求
- 正則化Regularizers,Constraints
-
以下主要說明Engine,Losses,Metrics,其它部分簡單介紹。其中任何一個內容都可以講好向章書的內容,所以我們只關注最重要的信息。
二、Layer 類說明
Layer層可以執行的功能
- 1、Computation from a batch of inputs to a batch of outputs
-
- Works in eager execution and graph execution
-
- Supports a training mode and an inference mode
-
- Supports masking(for time series and missing features)
Layer是keras API中的核心,是構建基它內容的基礎,所以keras的所有內容基本上就是Layer。Layer有許多作有,所以內建了大量的features,它將作爲一個容器來執行一些運算,把batch的輸入數據轉換成batch的輸出。所有的內建層都支持eager execution和graph execution這兩種模式,但用戶自定義的層只支持eager模式,有些層只支持eager模式比如recursive layer,SEMs。另外每一層有兩種狀態訓練狀態和推理狀態,比如dropout和batchnorm層,每一層會記憶timesteps和其它相關狀態來選擇切換狀態,這種適用於sequence序列處理。
- 2、Manage state(trainable weights, non trainable weights)
-
- 管理那些參數是可訓練的,那些是不可訓練由人來定義的。
- 3、Tracks losses &metrics(can be created during ‘call’),and update than can be disabled on demand
-
- 自動跟蹤記錄損失值和相關的評價指標
- 4、“Type checking”
-
- 調用一個層的時候,自動檢查數據類型是否正確
-
- 支持靜態形狀推理,可幫助用戶檢查數據形狀是否正確
- 5、Can be frozen or unfrozen(for fine-tuning,transfer learning ,GANS)
-
- 可以固化參數使其保持不變,或解固化。因化對於transfer learning之類的很有用。
- 6、Can be serialized/deserized(configuration-only) or saved/loaded(weight values)
-
- 模型的保存與加載
- 7、可以用來構建模型(Functional APi),函數式編程
-
- 8、(soon)即將支持混合精度mix precision:
-
- 將來會內建混合精度
Layer不具有的功能
- 1、不支持計算梯度Gradients(under consideration)
-
- 層不支持反向傳播和計算梯度,但開發人員正在考慮加上這個功能,加一個gradient的方法
- 2、不支持較底層的配置設置(low level api)\
-
- 比如設備配置(device placement)
- 3、不支持分佈式計算
-
- 不包括特定的分佈邏輯
- 4、只支持batchwish的計算
-
- 任何張量tensor不是以N 個樣本開頭和以N個樣本結束,都不支持,也就是說要有N個samples輸入,就要有N個sample輸出,沒有輸入或沒有輸出的都不能用Layer
- 5、“Type checking ”
-
- no datasets,no non-batch computation,no output-less or input-less processing
也就是說不能沒有數據,不能是非batch的計算,不能少輸出或少輸入(看到7分16秒)
- no datasets,no non-batch computation,no output-less or input-less processing
最長用的layer
class Linear(tf.keras.layers.Layer):
def __init__(self,units=32,input_dim=32):
super(Linear,self).__init__()
self.w=tf.Variable(initial_value=tf.random_normal_initializer()(shape=(input_dim,units)),trainable=True)
self.b=tf.Variable(initial_value=tf.zeros_initializer()(shape=(units,)),trainable=True)
def call(self,inputs):
return tf.matmul(inputs,self.w)+self.b
x = tf.ones((2,2))
linear_layer = Linear(4,input_dim=2)
#linear_layer.trainable_weights==[w,b] #自動加入到trainable_weights裏
y = linear_layer(x)