TensorFlow除錯程式介紹
文 | Google 工具和基礎架構軟體工程師 Shanqing Cai
我們懷著激動的心情與大家分享 TensorFlow 除錯程式 (tfdbg),這個工具可以簡化 TensorFlow 中對機器學習 (ML) 模型的除錯。
TensorFlow 是 Google 的開源 ML 內容庫,基於資料流圖表。一個典型的 TensorFlow ML 程式包括兩個獨立的階段:
利用內容庫的 Python API 將 ML 模型設定為資料流圖表;
利用 Session.run() 方法在圖表上訓練或執行推理。
如果在第二階段(即 TensorFlow 執行時)出現錯誤和缺陷,將難以進行除錯。
要了解出現這種情況的原因,請注意對標準 Python 除錯程式而言,Session.run() 呼叫實際上是單個語句,它並不會公開執行中圖表的內部結構(節點及其連線)和狀態(節點的輸出陣列 或 張量)。gdb 等較低階別的除錯程式在組織堆疊框架和變數值時無法令其與 TensorFlow 圖表操作產生關聯。專業級執行時除錯程式是 TensorFlow 使用者最常提出的功能請求之一。
tfdbg 滿足了這一執行時除錯需求。讓我們通過一段簡短的程式碼來了解 tfdbg 的實用效果,這段程式碼的作用是建立並執行一個簡單的 TensorFlow 圖表,以通過梯度下降法擬合一個簡單的線性方程。
正如本例中突出顯示的線條所示,會話物件包裝成一個用於除錯的類 (LocalCLIDebugWrapperSession),因此呼叫 run() 方法會啟動 tfdbg 的命令列介面 (CLI)。您可以利用滑鼠點選或命令執行一遍連續執行呼叫,檢查圖表的節點及其屬性,通過中間張量列表將圖表中所有相關節點完整的執行歷史記錄視覺化。通過使用 invoke_stepper 命令,您可以讓 Session.run() 呼叫在“步進器模式”下執行,在這種模式下,您可以步進到自己選擇的節點,觀察並修改其輸出,然後再執行進一步的分步除錯,其執行方式與除錯過程語言(例如 gdb 或 pdb)類似。
在開發 TensorFlow ML 模型時一類經常遇到的問題是,因溢位、除零、log(0) 等錯誤而導致出現無效數值(無窮大和 NaN)。在大型 TensorFlow 圖表中,查詢此類節點的根源可能既繁瑣又耗時。藉助於 tfdbg CLI 及其條件斷點支援,您可以快速找到引發問題的根源節點。下面這段視訊演示瞭如何利用 tfdbg 除錯神經網路中存在的無窮大/NaN 問題:
TensorFlow 除錯程式實用效果抓屏,摘自此教程:
www.tensorflow.org/programmers_guide/debugger
與列印選項等替代性除錯選項相比,tfdbg 需要改動的程式碼行數更少,提供的圖表覆蓋範圍更大,並且提供的除錯體驗互動性更強。它可以加快您的模型開發速度和除錯工作流執行速度。它還提供了其他功能,例如離線除錯從伺服器環境轉儲的張量並將其與 tf.contrib.learn 整合。首先,請訪問此文件。這篇研究論文對 tfdbg 的設計做了更詳盡的展示。
使用 tfdbg 時要求安裝的最低 TensorFlow 版本為 0.12.1。要報告錯誤,請在 TensorFlow 的 GitHub 問題頁面上設立問題。如需獲得一般使用幫助,請在 StackOverflow 上使用 tensorflow 標記發帖提問。
推薦閱讀:
TensorFlow 1.0 釋出,更快、更靈活、更方便!(含峰會主題演講視訊)
相關文章
- 介紹 GDB 除錯 Go除錯Go
- CJ/T188 除錯工具介紹除錯
- Android除錯工具-ADB史上最強介紹Android除錯
- 簡單介紹vscode除錯container中的程式的方法步驟VSCode除錯AI
- Tensorflow介紹和安裝
- Tensorflow教程(2)Tensorflow的常用函式介紹函式
- http代理401錯誤程式碼介紹HTTP
- 用Tensorflow2.0實現Faster-RCNN的程式碼介紹ASTCNN
- SAP Restful ABAP Programming 程式設計模型的 Action 實現和雲端除錯介紹REST程式設計模型除錯
- 代理IP常見錯誤程式碼介紹
- windbg除錯系列教程:sos擴充套件的介紹和使用除錯套件
- 超強API介面除錯工具:Apifox for Mac中文mian費功能介紹API除錯Mac
- Python 程式碼除錯—使用 pdb 除錯Python除錯
- 安卓手機怎樣開啟USB除錯模式(圖文介紹)安卓除錯模式
- [譯]寫給初學者的Tensorflow介紹[2]
- vscode 除錯linux程式VSCode除錯Linux
- GDB 除錯程式碼除錯
- repr除錯python程式除錯Python
- Java中使用JMX除錯簡介Java除錯
- OutputStreamWriter介紹&程式碼實現和InputStreamReader介紹&程式碼實現
- 從零開始的 TensorFlow:第 3 章、PyCharm 除錯篇PyCharm除錯
- 反除錯&反反除錯 -- 利用sysctl檢測偵錯程式是否存在除錯
- 推薦模型DeepCrossing: 原理介紹與TensorFlow2.0實現模型ROS
- 推薦模型NeuralCF:原理介紹與TensorFlow2.0實現模型
- vue 程式碼除錯神器Vue除錯
- Flutter 應用程式除錯Flutter除錯
- 用GDB除錯程式(六)除錯
- 徹底刪除MySQL步驟介紹ATSSMySql
- Java程式中除錯Python程式方法Java除錯Python
- NIO程式設計介紹程式設計
- 除錯篇——除錯物件與除錯事件除錯物件事件
- Sentry 官方 JavaScript SDK 簡介與除錯指南JavaScript除錯
- Emacs 除錯祕籍之 GUD 偵錯程式Mac除錯
- 反除錯 -- 利用ptrace阻止偵錯程式附加除錯
- 使用 VSCode 除錯 Electron 主程式程式碼VSCode除錯
- VS Code除錯C程式碼除錯C程式
- phpstorm 使用 Xdebug 除錯程式碼PHPORM除錯
- 除錯 Docker 容器內部程式除錯Docker
- Linux中使用GDB除錯程式Linux除錯