Tensorflow Eager Execution入門指南
- 2019 年 11 月 28 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_36670529/article/details/103121519
本文介紹了最新版的Tensorflow 1.7的功能及其使用方法,重點介紹其中最有趣的功能之一eager_execution,它許用戶在不創建靜態圖的情況下運行tensorflow代碼。本文給出了使用eager_execution的步驟及一些注意事項,並不涉及理論知識,如果您已經對Tensorflow有所了解,那麼可以閱讀以下本文,它能指導您使用這個有趣的功能:
- 使用Eager Execution,你可以在沒有session的情況下運行你的代碼
- 使用您自己的functions輕鬆解決梯度計算
- 支持將數據庫里的數據讀成用於實驗的數據集
- 對TensorRT的初始支持,以便您可以優化您的模型
最有趣的功能之一是eager_execution,允許用戶在不創建圖形的情況下運行tensorflow代碼。 讓我們嘗試一個簡單的程序:

注意輸出是一個張量而不是實際的數組本身。為了得到數組值,你需要在session中運行它。正如您所知道的,創建大型神經網絡時,您無法使用打印查看操作的輸出,從而增加了調試的複雜性。要檢查操作的輸出,您需要運行session並檢查session內的輸出:

現在讓我們換種方式再試一次:

現在通過使用tf.enable_eager_execution()可以獲得實際值。在eager_execution中,操作的輸出將是實際值而不是張量。但tf.enable_eager_execution的使用並不那麼簡單。 看看下一個例子。 下面是一段變量聲明:

所以聲明一個Tensorflow變量會引發一個錯誤,應該使用tf.contrib.eager.Variable。 這意味着我們不能在已有程序中使用Eager execution,並希望它能夠工作。為了使用eager實現功能,您需要更改您的代碼。其中一個變化是,您可以使用tensorflow數據API來代替使用佔位符和變量將數據提供給模型。 這通常更快,更易於管理。 以下是一個函數,它可根據平整化的圖像,標籤和批量大小(flattened images, labels and batch_size)來生成數據集。

現在讓我們試試這個函數。 我們得到下面的結果。 我們可以使用迭代器訪問數據集中的數據來進行批處理。

我們使用GradientTape記錄所有操作以便稍後應用於梯度更新。

grad()函數返回關於權重和偏差的損失的導數。然後將此傳遞給optimizer.apply_gradients()完成梯度下降的過程。除了上述變化外,幾乎所有東西都保持不變。 在使用eager execution之前,以下是一些關鍵點:
- 數據必須使用tensorcow.data.Dataset進行初始化。 (也可以使用其他方式,但不建議使用)
- eager execution默認在CPU上運行,要使用GPU,需要包含以下代碼:with tf.device('/ gpu:0')
- eager execution不會創建張量圖,要構建圖只需要刪除tf.enable_eager_execution()即可
- eager execution對開發(R&D)有好處,但在生產環境中你應該使用graph execution。
- 您可以保存通過eager execution生成的模型,然後以graph 或eager execution的形式加載該模型。