快速入門MXBoard:MXNet資料視覺化工具

AI前線發表於2018-06-05
快速入門MXBoard:MXNet資料視覺化工具
作者 | Wu Jun
譯者 | 無明
編輯 | Natalie,Vincent
AI 前線導讀:本文將教你入門一款深受大眾歡迎的 MXNet 資料視覺化工具——MXBoard。

更多幹貨內容請關注微信公眾號“AI 前線”,(ID:ai-front)

深度神經網路的設計和訓練非常之難,通常涉及大量的調整、修改網路結構和嘗試各種優化演算法和超引數。從理論角度看,深度神經網路架構的數學基礎仍然不夠完善,相關技術通常是以經驗性的成果作為基礎。

所幸的是,資料視覺化與生俱來的視覺特性可以彌補上述的部分缺陷,並描繪出更高層次的影象,在深度神經網路訓練過程中助研究人員一臂之力。例如,在模型訓練過程中,如果可以實時地繪製出梯度資料分佈,就可以快速檢測並糾正消失梯度或爆炸梯度現象。

快速入門MXBoard:MXNet資料視覺化工具

隨時間變化的梯度更新分佈

另外,對詞嵌入(word embedding)向量進行視覺化可以清楚地看到單詞在低維空間匯聚成不同的流形,從而保持語境接近度。另一個例子是資料聚類:使用 T-SNE 演算法將高維資料對映到較低維空間。在深度學習過程中可以大量使用資料視覺化,以便更好地理解訓練過程和資料本身。

TensorBoard 的出現為 TensorFlow 使用者帶來了強大的視覺化功能。我們已經收到許多不同使用者的反饋,包括企業使用者,因為 TensorBoard 提供了豐富的功能集,所以有很多人在使用 TensorFlow。這個強大的工具可以用在其他深度學習框架上嗎?感謝 TeamHG-Memex 的努力以及他們的 tensorboard_logger,我們現在可以使用一個透明的介面將自定義資料寫入事件檔案,然後由 TensorBoard 來讀取這些檔案。

它基於我們開發的 MXboard,一個用於記錄 MXNet 資料幀並在 TensorBoard 中展示它們的 Python 包。可以按照這些簡單的說明(https://github.com/awslabs/mxboard)來安裝 MXBoard。

注意:如果要使用 MXBoard 所有的功能,需要安裝 MXNet 1.2.0。在 MXNet 1.2.0 正式釋出之前,請安裝 MXNet 的 nightly 版本:pip install --pre mxnet

MXBoard 快速入門指南

MXBoard 支援 TensorBoard 的大部分資料型別:

快速入門MXBoard:MXNet資料視覺化工具

在設計 MXBoard API 時,我們參考了 tensorboard-pytorch API。所有的記錄 API 都是在一個叫作 SummaryWriter 的類中定義的。這個類包含了記錄檔案的檔案路徑、寫入頻率、佇列大小等資訊。要記錄特定資料型別的新資料,例如標量或影象,只需要在 SummaryWriter 物件上呼叫相應的 API。

例如,假設我們想繪製一個資料分佈圖,讓它正態分佈標準差逐漸減小。首先定義一個 SummaryWriter 物件,如下所示:

快速入門MXBoard:MXNet資料視覺化工具

然後在每個迴圈中建立一個 NDArray,其中的值來自正態分佈。然後,我們將 NDArray 傳給 add_histogram() 函式,指定 bin 的數量和迴圈索引 i,它將作為資料點的索引。最後,與在 Python 中使用的任何檔案描述符一樣,呼叫.close() 來關閉 SummaryWriter 使用的檔案控制程式碼。

快速入門MXBoard:MXNet資料視覺化工具

為了視覺化圖表,需要在終端上輸入工作目錄,然後輸入以下命令啟動 TensorBoard:

快速入門MXBoard:MXNet資料視覺化工具

然後在瀏覽器的位址列中輸入 127.0.0.1:8888。點選 HISTOGRAM,你會看到下面的渲染圖:

快速入門MXBoard:MXNet資料視覺化工具

視覺化越來越窄的正態分佈

真實世界中的 MXBoard

使用上面學到的知識,我們嘗試完成以下兩項任務:

  1. 監控監督學習訓練

  2. 瞭解卷積神經網路內部工作原理

訓練 MNIST 模型

我們將使用 Gluon vision API 中的 MNIST 資料集,並使用 MXBoard 進行實時記錄:

  • 交叉熵損失

  • 驗證和訓練的準確性

  • 梯度資料分佈

這些都可以用作衡量訓練進展的指標。

首先,我們定義一個 SummaryWriter 物件:

快速入門MXBoard:MXNet資料視覺化工具

我們指定了 flush_secs=5,因為我們希望每五秒將記錄寫入日誌檔案中,這樣就可以在瀏覽器中跟蹤訓練的實時進度。

然後我們記錄每個批次結束時的交叉熵損失:

快速入門MXBoard:MXNet資料視覺化工具

在每個批次結束時,我們將梯度記錄為 HISTOGRAM 資料型別,並將訓練和測試精度記錄為 SCALAR 型別。

快速入門MXBoard:MXNet資料視覺化工具

然後,我們同時執行 Python 訓練指令碼和 TensorBoard,以便在瀏覽器中視覺化實時的訓練進度。

要重現此實驗,可以在 Github 上找到完整的程式碼。

快速入門MXBoard:MXNet資料視覺化工具

梯度更新的分佈

快速入門MXBoard:MXNet資料視覺化工具

訓練指標:交叉熵損失、訓練準確性、驗證驗證準確性

卷積濾波器和特徵對映的視覺化

將卷積濾波器和特徵對映視覺化為影象是很有意義的,原因有兩個:

  1. 當訓練收斂時,卷積濾波器顯示出清晰的圖案檢測特徵、線條和獨特的色彩。不收斂或過度擬合模型的卷積濾波器會顯示出很多噪音。

  2. 觀察濾波器和特徵對映的 RGB 再現可以幫助我們理解學習到的和對網路有意義的特徵,通常是邊緣和顏色檢測。

在這裡,我們使用來自 MXNet Model Zoo 的三個預訓練 CNN 模型,Inception-BN、Resnet-152 和 VGG16。第一個卷積層的濾波器直接在 TensorBoard 中顯示,並與應用黑天鵝影象時得到的特徵對映一起顯示。我們可以注意到,網路可以具有不同的卷積核大小。


  • Inception-BN

快速入門MXBoard:MXNet資料視覺化工具

Inception-BN:7x7 核

  • RESNET-152

快速入門MXBoard:MXNet資料視覺化工具

RESNET-152:7x7 核

  • VGG16

快速入門MXBoard:MXNet資料視覺化工具

VGG-16:3x3 核

可以看到,三個模型的濾波器表現出相當好的平滑性和規律性,這是一個已收斂模型的通常跡象。彩色濾波器主要負責提取影象中基於顏色的特徵。灰度影象負責提取影象中物件的一般性圖案和輪廓特徵。視覺影象嵌入

最後一個例子同樣有趣。嵌入是機器學習領域的一個關鍵概念,包括計算機視覺和自然語言處理(NLP)。它是高維資料到低維空間的對映表示。在傳統的影象分類中,卷積神經網路倒數第二層的輸出通常連線到具有 Softmax 啟用的完全連線層,用於預測影象所屬的類或類別。如果剝離掉這個分類層的網路,那麼就只剩下一個網路,為每個樣本輸出一個特徵向量,通常每個樣本有 512 或 1024 個特徵。這就是所謂的影象嵌入。我們可以呼叫 MXBoard 的 add_embedding() API 來觀察投影到 2D 或 3D 空間的資料集的嵌入分佈情況。具有相似視覺特徵的圖片將聚集在一起。

在這裡,我們從驗證中隨機選擇 2304 個影象,並使用 Resnet-152 計算它們的嵌入,將嵌入新增到 MXBoard 日誌檔案並對其進行視覺化:

快速入門MXBoard:MXNet資料視覺化工具

使用 PCA 演算法的 Resnet-152 嵌入 3D 投影

預設情況下,我們使用 PCA 演算法將 2304 影象的嵌入投影到 3D 空間中。但是聚類效果並不明顯。這是因為 PCA 演算法無法保持原始資料點之間的空間關係。因此,我們使用 TensorBoard 介面提供的 t-SNE 演算法來更好地顯示嵌入。構建最佳投影是一個動態的過程:

快速入門MXBoard:MXNet資料視覺化工具

使用 T-SNE 演算法的 Resnet-152 嵌入 3D 投影

在 t-SNE 演算法收斂後,可以清楚地看到資料集被分成幾個簇。

快速入門MXBoard:MXNet資料視覺化工具

最後,我們可以使用 TensorBoard UI 來驗證影象分類的正確性。我們在 TensorBoard GUI 的右上角輸入“dog”。所有被分類為“dog”標籤的驗證資料集的圖片都會突出顯示。我們還可以看到,從 T-SNE 投影得出的聚類緊挨著分類邊界。

快速入門MXBoard:MXNet資料視覺化工具

突出顯示狗的影象

所有相關程式碼和說明可以在這裡(https://github.com/reminisce/mxboard-demo)找到。

結論

我們可以從這個 MXBoard 教程中看到,視覺化是監督模型訓練並深入瞭解深度學習原理的強大工具。MXBoard 為 MXNet 提供了一個簡單、最低限度侵入式、易於使用的集中式視覺化解決方案,適用於科學研究和生產環境。最重要的是,要使用它,你只需要一個瀏覽器。

英文原文連結:

https://medium.com/apache-mxnet/mxboard-mxnet-data-visualization-2eed6ae31d2c



相關文章