Keras 簡介
Keras 是一個用 Python 編寫的高級神經網絡 API,它能夠以 TensorFlow, CNTK, 或者 Theano 作為后端運行。Keras 的開發重點是支持快速的實驗。能夠以最小的時延把你的想法轉換為實驗結果,是做好研究的關鍵。 ————Keras官方定義
簡單來說,Keras 是一個獨立的、機器學習的高級 API ;而且在 TensorFlow2.0 發布之時被包含進了 TensorFlow ,因此我們可以在 TensorFlow2.0 及其以后的版本中直接使用 Keras 。
1. Keras 是什么以及它的由來
Keras 的前身是 Fran?ois Chollet 為 ONEIROS 項目所的編寫的代碼,在 2015 年開源成為神經網絡的開發工具。Keras 最初參考了 Torch 的風格并且完全由 Python 編寫。
Keras 從創建之初到后來被 TensorFlow 所支持,經歷了很多的變化,具體變化如下:
- Keras 最初在 2015 年被開源發布,從誕生之初就被設計成為一個機器學習的高級 API;
- Keras 在 2016 年發布了第一個正式版本 1.0.0,意味著進入穩定版本階段;
- 2017 年 Keras 發布了 2.0.0 版本并被整合進 TensorFlow;
- 2018 年在 TensorFlow2.0 公開后便被正式確立為 tf.keras 高階 API;
- 直到如今,使用 tf.keras 依然是使用 TensorFlow 構建模型的最快捷方式。
也就是說 Keras 并不是一個單獨的框架,他只是一個高級的 API 庫;利用它簡易和快速的原型設計,我們可以根據其 API 實現高級網絡的構建。進而使用 TensorFlow 進行訓練等進一步的工作。
而在本課程之中我們所提到的 Keras 都是指的是 TensorFlow 中的 Keras 模塊。
2. tf.Keras 與 TesnorFlow 結合的優勢
說到 Keras 與 TensorFlow1.x 的結合,就不得不說一下 Keras 的特點:
- Keras 基于 Python 發展而來,因此它的使用符合 Python 開發者的使用習慣
- Keras 提供的 API 較為高階,我們可以不用關心底層的實現的一些細節
- Keras 擁有友好、全面的文檔,我們可以輕松地進行學習
- 便于使用,得益于高階 API ,我們可以輕松地實現模型的構建與訓練
- 擴展性好,我們可以使用 TensorFlow 來擴展 Keras ,從而實現更加定制化的需求
而 TensorFlow 最大的特點就在于快速、快捷,我們能夠以很高的性能實現一些模型的訓練工作。
自 2017 年開始,Keras 的大部分組件被整合至 Tensorflow 的 Python API中,但是卻沒有作為高階 API(tf.keras)整合進 TensorFlow 之中。因此大多數工作人員依然采用的是獨立安裝的 Kears 進行高層模型的構建,而使用 TensorFlow 作為底層框架進行訓練。
在 TensorFlow2.x 之中,我們便可以在 TensorFlow 之中使用 Keras ,從而將兩者的優勢互相結合,一方面我們可以快速的構建模型,另外一方面我們也可以進行模型的快速訓練。
3. 函數式 API 編程
說到 Keras,就不得不說一下 TensorFlow2.0 引入的函數式 API 編程。也就是 Eager Execution。
所謂函數式 API 編程,通俗來講就是我們每一個語句都是通過函數的調用來實現的,而這也意味著我們可以摒棄掉某一條語句的下文而單獨執行。
這似乎很符合我們的編程的習慣,但是在 TensorFlow1.x 之中,并不默認支持 Eager Execution 。通常來講我們在 TensorFlow1.x 之中我們需要首先創建一個 Session,然后才能運行程序。
而隨著 Keras 的引入,TesnorFlow 開始支持 Eager Execution,也就是說我們可以完全采用函數調用的方式來進行機器學習的開發。這無疑大大降低了開發的門檻,也可以幫助我們更加快捷、方便地進行模型的相應的工作。
我們可以來看一下具體代碼的區別,在 TensorFlow1.x 之中,我們在訓練的過程之中一般采用如下的方式進行訓練:
with tf.Session() as session:
session.run(tf.global_variables_initializer())
session.run(tf.tables_initializer())
model.fit(X_train, y_train, validation_data=(X_valid, y_valid), epochs=10, batch_size=64)
可以看到,我們首先需要創建一個會話(tf.session),然后才能在其中進行模型的訓練操作。
而在 TensorFlow2.x 之中,我們只需要如下代碼就可以實現模型的訓練:
model.fit(X_train, y_train, validation_data=(X_valid, y_valid), epochs=10, batch_size=64)
相信通過代碼的比對大家就可以輕松地看出 Eager Execution 的優勢:
- 程序流程明了,符合大多數Python工作者的編碼習慣;
- 代碼簡單,方便運行時調試;
- Eager Execution 提供了更加簡潔明了的接口,而避免了 session 復雜易錯的接口。
而在以后的學習與開發之中,我們都會通過 Eager Execution 模式來進行。
4. 小結
TensorFlow 中的 Keras 模塊為一個新的、易用、快捷的模塊,我們可以依靠 Keras 模塊來快速地構建網絡。同時它也擁有著高度的可擴展性,我們可以使用 TensorFlow 對其進行輕松的擴展;從而大大提升我們的開發效率。