Keras 作者 Fran?ois Chollet 今天發(fā)表了一系列推文,如果你使用 TensorFlow 2.0 + Keras 做深度學(xué)習(xí)研究,這里有你需要知道的一切。
TensorFlow 2.0 前幾天新鮮出爐,Alpha 版可以搶先體驗。新版本主打簡單易用可擴展,大大簡化了 API。
Keras 作者 Fran?ois Chollet 今天發(fā)表了一系列推文,用12個示例解釋了使用TensorFlow 2.0 + Keras 的一些重要技巧。
如果你使用 TF 2.0 + Keras做深度學(xué)習(xí)研究,這里有你需要知道的一切。
Keras 作者 Fran?ois Chollet
1)你需要知道的第一個類是 “Layer”。一個 Layer 封裝了一個狀態(tài) (權(quán)重) 和一些計算 (在 “call” 方法中定義)。
2)“add_weight” 方法提供了創(chuàng)建權(quán)重的快捷方式。
3)最好在一個單獨的 “build” 方法中創(chuàng)建權(quán)重,使用你的 layer 看到的第一個輸入的形狀來調(diào)用該方法。這種模式讓我們不用必須指定’ input_dim ‘:
4)你可以通過在 GradientTape 中調(diào)用 layer 來自動檢索該層權(quán)重的梯度。使用這些梯度,你可以手動或使用優(yōu)化器對象來更新 layer 的權(quán)重。當(dāng)然,你也可以在使用梯度之前修改它們。
5)由 layers 創(chuàng)建的權(quán)重可以是可訓(xùn)練的,也可以是不可訓(xùn)練的。是否可訓(xùn)練可以在 layer 的屬性 “trainable_weights” 和 “non_trainable_weights” 中看到。比如,這是一個具有不可訓(xùn)練權(quán)重的層:
6)層可以遞歸地嵌套,以創(chuàng)建更大的計算塊。每一層將跟蹤其子層的權(quán)重 (包括可訓(xùn)練的和不可訓(xùn)練的)。
7)層會在前向傳遞時創(chuàng)建損失。這對于正則化損失特別有用。子層創(chuàng)建的損失由父層遞歸跟蹤。
8)這些損失在每次向前傳遞開始時由頂層清除 —— 它們不會累積。“l(fā)ayer.losses” 總是只包含在 “最后一次” 前向傳遞時產(chǎn)生的損失。在編寫訓(xùn)練循環(huán)時,你通常需要將這些損失累加起來使用。
9)TF 2.0 默認(rèn)情況下是 eager。但是通過將計算編譯成靜態(tài)圖,將能夠獲得更好的性能。靜態(tài)圖是研究人員最好的朋友!你可以通過將其包裝在一個 tf.function 中來編譯任何函數(shù):
10)有些層,特別是 “BatchNormalization” 層和 “退 Dropout” 層,在訓(xùn)練和推理過程中會表現(xiàn)出不同的行為。對于這樣的層,標(biāo)準(zhǔn)做法是在 “call” 方法中加入一個 “training”(boolean) 參數(shù)。
11)有很多內(nèi)置層是可用的,從 Dense 層到 Conv2D 層到 LSTM 層,再到 Conv2DTranspose 或 ConvLSTM2D。你要學(xué)會好好重用這些內(nèi)置函數(shù)。
12)要構(gòu)建深度學(xué)習(xí)模型,你不必總是使用面向?qū)ο?a target="_blank">編程。到目前為止,我們看到的所有層都可以按函數(shù)組合,就像這樣 (我們稱之為 “Functional API”):
函數(shù)式 API 往往比 subclassing 更簡潔,并且還有其他優(yōu)點。
了解關(guān)于 Functional API 的更多信息:
https://www.tensorflow.org/alpha/guide/keras/functional
但是,請注意,函數(shù)式 API 只能用于定義層的 DAGs—— 遞歸網(wǎng)絡(luò)應(yīng)該定義為 “Layer” 子類。
在研究工作中,你可能經(jīng)常發(fā)現(xiàn)自己混合匹配了 OO 模型和函數(shù)式模型。
以上,就是使用 TensorFlow 2.0 + Keras 來重新實現(xiàn)大多數(shù)深度學(xué)習(xí)研究論文所需要的全部內(nèi)容!
現(xiàn)在讓我們來看一個非常簡單的例子:hypernetworks。
hypernetwork 是一個深度神經(jīng)網(wǎng)絡(luò),它的權(quán)重由另一個網(wǎng)絡(luò) (通常較小) 生成。
讓我們實現(xiàn)一個非常簡單的 hypernetwork:我們將使用前面定義的 “Linear” 層,并使用它生成另一個 “Linear” 層。
另一個快速示例:以任何一種風(fēng)格實現(xiàn) VAE,可以是 subclassing,或者函數(shù)式 API。找到最適合你的方法吧!
subclassing
Functional API
最后,你可以在這個 Colab 筆記本中使用這些代碼示例:
https://colab.research.google.com/drive/17u-pRZJnKN0gO5XZmq8n5A2bKGrfKEUg
-
API
+關(guān)注
關(guān)注
2文章
1486瀏覽量
61820 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5493瀏覽量
120983 -
tensorflow
+關(guān)注
關(guān)注
13文章
329瀏覽量
60499
原文標(biāo)題:Keras作者:TF 2.0+Keras深度學(xué)習(xí)研究你需要了解的12件事
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論