<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 三、使用 TensorBoard 監控網絡訓練 在本章中,我將向您展示如何使用 TensorBoard 幫助更快更輕松地訓練深度神經網絡。 我認為 TensorBoard 是一個很棒的工具,經常被忽略,而它又常常被拖到腳注或上一章中。 現在,讓我們看一下 TensorBoard,以便我們可以立即開始利用它。 我們將在本章介紹以下主題: * TensorBoard 的簡要概述 * 設置 TensorBoard * 將 Keras 連接到 TensorBoard * 使用 TensorBoard # TensorBoard 的簡要概述 TensorBoard 是一個基于 Web 的應用,可以幫助您可視化 TensorFlow 中創建的深度神經網絡的指標,參數和結構。 它將幫助您更快,更輕松地調試和優化深度神經網絡。 正如您現在可能已經猜到的那樣,深度神經網絡可能變得相當復雜。 不幸的是,這意味著很多事情可能出錯。 眾所周知,我時不時地會犯一個錯誤,而當錯誤發生在一個深度神經網絡內部時,該深度神經網絡位于一個框架內,該框架在另一個框架上運行,在一個 GPU 上運行,很難找到這些錯誤。 他們。 TensorBoard 可能是您需要在其他本來很暗的房間中發現問題的手電筒。 TensorBoard 將允許您在訓練網絡時監視指標和參數的變化,這可以大大加快故障排除速度。 TensorBoard 也非常適合優化。 借助 TensorBoard,您可以直觀地比較多個模型運行。 這使您可以試驗不斷變化的架構和超參數,然后相對于網絡的其他運行評估那些變化。 所有這一切都可能在每個周期發生,因此如果您愿意,您可以取消效果不佳的模型運行,從而節省了時間和金錢。 您可以在[這個頁面](https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard)上閱讀有關 TensorBoard 的更多信息。 # 設置 TensorBoard TensorBoard 是一個獨立的 Web 應用。 您將通過網絡瀏覽器使用它。 設置需要兩個步驟。 首先,我們將設置 TensorBoard 以可視化在 TensorFlow 和 Keras 中構建的網絡,然后我們將設置 Keras 與 TensorBoard 共享信息。 本節介紹 TensorBoard 的設置。 接下來的內容將涉及修改 Keras 代碼以與 TensorBoard 共享信息。 # 安裝 TensorBoard 如果您已經安裝了 TensorFlow,則您的機器上可能已經安裝了 Tensorboard。 萬一您可以安裝和更新 TensorBoard,可以使用`pip`進行安裝,就像 Keras 和 TensorFlow 一樣。 要安裝它,只需運行以下命令: ```py pip install -U tensorboard ``` # TensorBoard 如何與 Keras/TensorFlow 交互 TensorBoard 和 TensorFlow 使用公共日志目錄共享信息。 在 Keras 和 TensorFlow 訓練中,Keras 將指標和激活直方圖(稍后將對此進行詳細介紹)寫入您指定的日志目錄中。 現在,讓我們使用以下代碼在主目錄中為該示例創建一個日志目錄: ```py mkdir ~/ch3_tb_log ``` # 運行 TensorBoard 剩下的就是啟動 TensorBoard 進程。 我們可以使用以下代碼啟動 TensorBoard: ```py tensorboard --logdir ~/ch3_tb_log --port 6006 ``` 您可能已經猜到了,`--logdir`指定我們剛剛創建的目錄,`--port 6006`指定 TensorBoard 將在其上運行的端口。 端口`6006`是默認端口。 但是,您可以使用所需的任何端口。 現在,您應該可以通過將瀏覽器指向`http://<ip address>:6006`來導航到 TensorBoard URL。 如果使用的是云服務,則可能還需要調整防火墻或安全規則,以允許通過端口`6006`連接到服務器。 在 Amazon Web Services(AWS)上,您可以通過編輯與您的 EC2 實例關聯的安全組中的入站規則來執行此操作: ![](https://img.kancloud.cn/4d/40/4d405b31d716c11f61e2da127e0be15c_1119x347.png) 您可能不希望像我上面那樣允許全世界范圍內的開放訪問。 這只是一個測試實例,因此我不太關心安全性,無論如何我都喜歡過著危險的生活。 如果一切正常,您應該看到一個空的 TensorBoard,如下所示: ![](https://img.kancloud.cn/01/89/01890bfa6b8db04c22235e42f1a9920b_1800x726.png) 不用擔心,我們很快就會填滿。 # 將 Keras 連接到 TensorBoard 現在 TensorBoard 已啟動并正在運行,剩下的就是告訴 Keras 將 TensorBoard 日志寫入我們上面指定的目錄。 幸運的是,這確實很容易實現,它為我們提供了一個很好的機會來了解 Keras 中稱為 **Keras 回調**的特殊函數類。 # 引入 Keras 回調 Keras 中的回調是可以在訓練過程中運行的函數。 他們可以做各種偉大的事情,例如在某個周期之后節省模型權重,記錄事情,更改超參數或方便地編寫 TensorBoard 日志文件。 您甚至可以創建自己的自定義回調。 在下一節中,我們將使用 TensorBoard 回調。 但是,我鼓勵您在[這個頁面](https://keras.io/callbacks)上查看 Keras 中可用的所有回調。 TensorBoard 回調是可以在模型訓練之前進行配置和實例化的對象。 我們將創建這些回調的列表。 一旦創建了要用于深度神經網絡的回調列表,我們就可以將該列表作為參數傳遞給模型的`.fit()`方法。 然后,將在每個周期或 Keras 適當時使用這些回調。 在我們繼續下一個示例時,這將更有意義。 # 創建一個 TensorBoard 回調 在本章中,我通過復制第 2 章“開始使用深度學習來解決回歸問題”的網絡和數據。 我們將做一些簡單的添加來添加 TensorBoard 回調。 讓我們從修改我們首先構建的`mlp`開始。 首先,我們需要使用以下代碼導入 TensorBoard 回調類: ```py from keras.callbacks import TensorBoard ``` 然后,我們將啟動回調。 我喜歡在創建所有回調的函數中執行此操作,以使事情精心制作和整理。 下面的`create_callbacks()`函數將返回我們將傳遞給`.fit()`的所有回調的列表。 在這種情況下,它將返回一個包含一個元素的列表: ```py def create_callbacks(): tensorboard_callback = TensorBoard(log_dir='~/ch3_tb_log/mlp', histogram_freq=1, batch_size=32, write_graph=True, write_grads=False) return [tensorboard_callback] ``` 在繼續之前,我們先介紹一下這里使用的一些參數: * `log_dir` **:**這是我們將為 TensorBoard 寫入日志文件的路徑。 您可能已經注意到,我正在將 MLP 網絡的 TensorBoard 回調的日志寫入`~/ch_3_tb_log/mlp`,這將在我們為 TensorBoard 指定的目錄下創建一個新的目錄`mlp`。 這是故意的。 我們將配置在第 2 章,“使用深度學習解決回歸問題”訓練的深度神經網絡模型,以登錄到單獨的目錄`~/ch_3_tb_log/dnn`。 這樣做將使我們能夠比較兩個模型的運行。 * `histogram_freq`:這指定我們將多長時間計算一次激活和權重的直方圖(以周期為單位)。 它的默認值為 0,這會使日志更小,但不會生成直方圖。 我們將介紹為什么以及何時您會對直方圖感興趣。 * `batch_size`:這是用于計算直方圖的批量大小。 默認為 32。 * `write_graph`:此函數為布爾值。 這將告訴 TensorBoard 可視化網絡圖。 這可能非常方便,但也會使日志變得很大。 * `write_grads`:此函數也是布爾值。 這將告訴 TensorBoard 也計算梯度的直方圖。 由于 TensorFlow 會自動為您計算梯度,因此很少使用。 但是,如果您要使用自定義激活或費用,它可能是出色的故障排除工具。 TensorBoard 回調可以接受用于在圖像上運行神經網絡或通過使用嵌入式層的其他參數。 我們將在本書的后面介紹這兩個方面。 如果您對這些函數感興趣,請訪問 [TensorBoard API 文檔](https://keras.io/callbacks/#tensorboard)。 現在,我們只需要創建回調列表,并將`mlp`與`callbacks`參數匹配即可。 看起來像這樣: ```py callbacks = create_callbacks() model.fit(x=data["train_X"], y=data["train_y"], batch_size=32, epochs=200, verbose=1, validation_data=(data["val_X"], data["val_y"]), callbacks=callbacks) ``` 為了清楚起見,我將新參數加粗了。 在繼續使用 TensorBoard 之前,我將以與檢測`mlp`相同的方式來檢測深度神經網絡。 唯一的代碼更改是我們將 TensorBoard 日志寫入的目錄。 下面給出了實現該方法的方法,供您參考: ```py def create_callbacks(): tensorboard_callback = TensorBoard(log_dir='./ch3_tb_log/dnn', histogram_freq=1, batch_size=32, write_graph=True, write_grads=False) return [tensorboard_callback] ``` 其余代碼將相同。 現在,讓我們再次訓練每個網絡,看看 TensorBoard。 # 使用 TensorBoard 現在我們已經完全配置了 TensorBoard 并告訴我們的網絡如何向其發送日志數據,我們可以開始利用它了。 在本章的其余部分,我將向您展示一些我最喜歡的使用 TensorBoard 的方式。 TensorBoard 的功能不只此而已,我們將在本書的其余部分中重新討論其他功能。 # 可視化訓練 由于我們已在第 2 章“使用了深度學習解決回歸問題”中使用這兩種模型編寫了日志數據,因此可以使用 TensorBoard 以圖形方式比較這兩種模型。 打開 TensorBoard 并轉到`SCALARS`選項卡。 您應該會看到類似這樣的內容。 您可能需要單擊`loss`和`val_loss`來展開圖形: ![](https://img.kancloud.cn/f4/78/f478572e3aaaa8ac951517d2a7734413_1669x683.png) 張量板顯示模型的損失圖和`val_loss`圖 如果您查看屏幕的左下角,則應注意,我們創建的每個目錄都有與之關聯的運行。 兩者均處于選中狀態。 這意味著在我們的圖形上,我們將看到兩個模型的輸出。 TensorBoard 可以容納許多運行,并且您可以通過正則表達式過濾它們(例如`^dnn`將顯示所有以`dnn`開頭的運行)。 這意味著,如果您通過許多實驗或運行(例如超參數優化)來搜索*最佳*模型,則可以在明確并一致地命名運行,并包含有意義的超參數和架構信息的情況下,以這個名字快速瀏覽它們! 這些圖上的默認 **X** 比例尺是**周期**。 **Y** 值是我們選擇的**損失函數**,即 **MAE**。 您可以單擊圖形以瀏覽它們并拖動以縮放。 看到這樣的圖,我們真的可以看到每個網絡的相對偏差和方差。 雖然模型之間在訓練損失方面有很好的分離,但深度神經網絡在驗證集上只得到了一點點改善,這表明我們已經進入了過擬合的領域。 # 可視化網絡圖 雖然能夠查看我們的訓練過程并比較模型顯然很不錯,但這并不是 TensorBoard 所能做的。 我們還可以使用它來可視化網絡結構。 在這里,我導航到`GRAPHS`并提出了深度神經網絡的結構: ![](https://img.kancloud.cn/2e/88/2e88dd353a952e5d019c58a9cab87a3d_1669x683.png) TensorBoard 顯示深度神經網絡的結構 訓練節點代表輸入張量,默認情況下,正是這個巨型章魚以某種無益的方式連接到圖的其余部分。 要解決此問題,您只需單擊該節點,然后單擊從主圖中刪除。 然后將其移到側面。 # 可視化損壞的網絡 TensorBoard 是一個出色的故障排除工具。 為了證明這一點,我將復制我們的深度神經網絡并將其破壞! 幸運的是,打破神經網絡真的很容易。 相信我,我已經無意間做了這件事,以至于我現在基本上是專家。 想象一下,您剛剛訓練了一個新的神經網絡,并且看到損失看起來像這樣: ![](https://img.kancloud.cn/5c/da/5cdafef5b61f4f25c4fb3f52afc371b9_1320x462.png) 該網絡的損失函數被卡住,并且比我們之前的運行要高得多。 什么地方出了錯? 導航到 TensorBoard 的`HISTOGRAMS`部分,并可視化第一個隱藏層。 讓我們比較兩個網絡中隱藏層 1 的權重直方圖: ![](https://img.kancloud.cn/70/0a/700ac3aa6fc74e616759f80a47c98c23_1669x683.png) 顯示兩個網絡中隱藏層 1 的權重直方圖的屏幕截圖 對于標記為 dnn 的網絡的偏差和權重,您將看到權重分布在整個圖中。 您甚至可以說每個分布都可能是正態分布。 您也可以在“分布”部分比較權重和偏差。 兩者都以略有不同的方式呈現大多數相同的信息。 現在,看看我們破碎的網絡的權重和偏置。 并不是*這樣分散*,實際上的權重基本上是相同的。 網絡并不是真正的學習。 該層中的每個神經元看起來或多或少都是相同的。 如果您查看其他隱藏層,則會看到更多相同的層。 您可能想知道我是怎么做到的。 您很幸運,我會分享我的秘密。 畢竟,您永遠都不知道何時需要斷開自己的網絡。 為了解決問題,我將網絡中的每個神經元初始化為完全相同的值。 發生這種情況時,每個神經元在反向傳播期間收到的誤差是完全相同的,并且更改的方式也完全相同。 網絡然后無法破壞對稱性。 以隨機方式將權重初始化到深度神經網絡非常重要,如果您違反了該規則,就會發生這種情況! 遇到問題時,可以像這樣完全使用 TensorBoard。 請記住,我們的深度神經網絡有 4033,在深度學習領域中,它仍然可以算作*很小的*。 使用 TensorBoard,我們能夠直觀地檢查 4033 個參數并確定問題。 TensorBoard 是一個用于深度學習的暗室中的神奇手電筒。 # 總結 在本章中,我們討論了如何安裝,配置和使用 TensorBoard。 我們討論了如何使用 TensorBoard 在 TensorBoard 的`SCALARS`部分中的每個周期檢查模型的損失函數,從而直觀地比較模型。 然后,我們使用 TensorsBoard 的`GRAPHS`部分來可視化網絡結構。 最后,我們通過查看直方圖向您展示了如何使用 TensorBoard 進行故障排除。 在下一章中,我們將研究如何使用 Keras 和 TensorFlow 解決二分類問題,從而擴展我們的深度學習技巧。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看