【Tensorflow2.0】3、 tf.keras介紹


本文將介紹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秒)

最長用的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)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章