TensorFlow2.0的使用(理論篇)
本章重點介紹“tf.data”和“tf.keras”這兩個API的理論。
tf.data”API除GPU和TPU等硬件加速設備外,高效的數據輸入管道也可以很大程度地提升模型性能,減少模型訓練所需要的時間。
數據輸入管道本質是一個ELT(Extract、Transform和Load)過程:
●Extract:從硬盤中讀取數據(可以是本地的,也可以是云端的)。
●Transform:數據的預處理(如數據清洗、格式轉換等)。
●Load:將處理好的數據加載到計算設備(例如CPU、GPU及TPU等)。
數據輸入管道一般使用CPU來執行ELT過程,GPU等其他硬件加速設備則負責模型的訓練,ELT過程和模型的訓練并行執行,從而提高模型訓練的效率。另外ELT過程的各個步驟也都可以進行相應的優化,例如并行地讀取和處理數據等。在TensorFlow中可以使用“tf.data”API來構建這樣的數據輸入管道。
Keras是一個基于Python編寫的高層神經網絡API,其后端可以采用TensorFlow、Theano及CNTK,目前大多是以TensorFlow作為后端引擎的。TensorFlow將Keras的代碼吸收進來,并將其作為高級API提供給用戶使用。“tf.keras”提高了TensorFlow的易用性,同時也保持了TensorFlow的靈活性和性能。
1.基本模型的搭建和訓練
可以使用“tf.keras.Sequential”來創建基本的網絡模型。通過這種方式創建的模型又稱為順序模型,因為這種模型是由多個網絡層線性堆疊而成的。
“tf.keras.layers”用于生成網絡層,包括全連接層(tf.keras.layers.Dense())、Dropout層(tf.keras.layers.Dropout),以及卷積網絡層(如二維卷積:tf.keras.layers.Conv2D)等。
2.搭建高級模型
(1)函數式API可以使用“tf.keras.Sequential”來搭建基本的網絡結構,但更多的時候我們面臨的是比較復雜的網絡結構,例如,模型可能有多輸入或多輸出、模型中的某些網絡層需要共享等,此時就需要用到函數式API。
(2)實現自定義的模型類和網絡層通過繼承“tf.keras.Model”和“tf.keras.layers.Layer”可以實現自定義的模型類和網絡層為我們構建自己的網絡結構提供了非常好的靈活性。
3.回調函數
回調函數會在模型的訓練階段被執行,可以用來自定義模型訓練期間的一些行為,例如輸出模型內部的狀態等。我們可以自己編寫回調函數,也可以使用內置的一些函數,例如:
●tf.keras.callbacks.ModelCheckpoint:定期保存模型。
●tf.keras.callbacks.LearningRateScheduler:動態地改變學習率。
●tf.keras.callbacks.EarlyStopping:當模型在驗證集上的性能不再提升時終止訓練。
●tf.keras.callbacks.TensorBoard:使用TensorBoard來監測模型。
4.模型的保存和恢復使用“model.save()”和“tf.keras.models.load_model()”來保存和加載由“tf.keras”訓練的模型。通過“model.save()”保存的是一個完整的模型信息,包括模型的權重和結構等。除保存完整的模型外,還可以單獨保存模型的權重參數或者模型的結構。
“tf.data”和“tf.keras”的理論介紹到此告一個段落,下一篇將從代碼實戰開始。
TensorFlow Keras
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。