丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給汪思穎
發(fā)送

0

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

本文作者: 汪思穎 2018-04-28 11:54
導(dǎo)語:MXBoard 支持了 TensorBoard 中大部分的數(shù)據(jù)類型,MXBoard API 的設(shè)計參考了 tensorboard-pytorch。

雷鋒網(wǎng) AI 研習(xí)社按,日前,MXNet 作者李沐在知乎上發(fā)文,介紹他們開發(fā)了一個記錄 MXNet 數(shù)據(jù)類型的庫,稱作 MXBoard,記錄結(jié)果可以用 TensorBoard 來呈現(xiàn)。原文如下,雷鋒網(wǎng) AI 研習(xí)社獲其授權(quán)轉(zhuǎn)載。

寫在前面

深度神經(jīng)網(wǎng)絡(luò)自出現(xiàn)以來就一直飽受爭議。從實踐角度來講,設(shè)計并訓(xùn)練出一個可用的模型非常困難,需要涉及大量的調(diào)參、修改網(wǎng)絡(luò)結(jié)構(gòu)、嘗試各種優(yōu)化算法等等;從理論角度來看,深度神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)理論證明并不完備,從而造成人們對其基本原理缺乏清晰的認(rèn)識。而數(shù)據(jù)可視化帶來的直觀效果可以很大程度上彌補(bǔ)上述的不足。比如,模型訓(xùn)練時如果能實時畫出梯度數(shù)據(jù)分布,可以很快發(fā)現(xiàn)并糾正梯度消失或者梯度爆炸的現(xiàn)象。再比如,詞嵌入(word embedding)的可視化表明文字根據(jù)語義在低維空間聚合成不同的流形(manifold),這也從數(shù)學(xué)上解釋了,為什么增加詞向量的維度可以更好地區(qū)分不同語義的聚類(低維空間纏繞的流形在高維可以分開)。優(yōu)秀可視化工具對深度學(xué)習(xí)的份量可見一斑。

TensorBoard 的橫空出世給 TensorFlow 的使用者帶來了可視化的福音。我們曾聽到過很多用戶(包括企業(yè)用戶)介紹,選擇TensorFlow 是因為可以用 TensorBoard。這么好的東西能否給各大深度學(xué)習(xí)框架共享呢?多虧了 TeamHG-Memex 這個組織,將 TensorFlow 中寫數(shù)據(jù)到事件文件 (event files)的算法提取出來。自此,開發(fā)者們只需要將這個算法嵌入到深度學(xué)習(xí)的框架中,就可以使用 TensorBoard 來可視化框架特有的數(shù)據(jù)結(jié)構(gòu)了。

正是基于這樣的基礎(chǔ),我們開發(fā)了一個記錄 MXNet 數(shù)據(jù)類型的庫,稱作 MXBoard,記錄結(jié)果得以用 TensorBoard 來呈現(xiàn)。安裝 MXBoard 請參考這里。

注:請安裝 MXNet 1.2.0 版本來使用 MXBoard 的全部功能。在 MXNet 1.2.0 正式發(fā)布前,請安裝 MXNet nightly 版本來使用 MXBoard,pip install --pre mxnet

MXBoard 快速上手指南

MXBoard 支持了 TensorBoard 中大部分的數(shù)據(jù)類型,如下圖所示。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

MXBoard API 的設(shè)計參考了 tensorboard-pytorch,所有的記錄 API 都定義在一個叫 SummaryWriter 的類當(dāng)中,這個類含有諸如記錄的文件地址、寫文件的頻率、寫文件的隊列大小等等信息,用戶可以根據(jù)需求設(shè)置。當(dāng)需要把當(dāng)前數(shù)據(jù)記錄成 TensorBoard 中某種數(shù)據(jù)類型時,用戶只要調(diào)用相應(yīng)的 API 即可。

比如,我們想畫一個正態(tài)分布標(biāo)準(zhǔn)差逐漸縮小的數(shù)據(jù)分布圖。首先定義一個寫記錄的對象如下,它會把數(shù)據(jù)寫入到當(dāng)前文件夾下的名為 logs 的文件夾。

from mxboard import *

sw = SummaryWriter(logdir='./logs')

接著在每個循環(huán)里,用 MXNet 的隨機(jī)正態(tài)分布算子創(chuàng)建一個 NDArray,把這個 NDArray 傳給寫數(shù)據(jù)的 API add_histogram,指定畫分布圖時 bin 的數(shù)量和當(dāng)前的循環(huán)數(shù)。最后,和 Python 里常用的文件寫入器一樣,記得關(guān)閉這個 SummaryWriter。

import mxnet as mx
for i in range(10):
   # create a normal distribution with fixed mean and decreasing std
   data = mx.nd.random.normal(loc=0, scale=10.0/(i+1), shape=(10, 3, 8, 8))
   sw.add_histogram(tag='norml_dist', values=data, bins=200, global_step=i)
sw.close()

為了看到效果圖,打開命令行窗口,進(jìn)入到當(dāng)前文件夾,鍵入如下命令以打開 TensorBoard:

tensorboard --logdir=./logs --host=127.0.0.1 --port=8888

接著在瀏覽器地址欄輸入 127.0.0.1:8888,點擊 HISTOGRAM,就可以看到如下效果圖了。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

實戰(zhàn) MXBoard

有了使用 MXBoard 的基本概念,我們來嘗試通過可視化完成下面兩個任務(wù):

  1. 監(jiān)督模型訓(xùn)練

  2. 理解卷積神經(jīng)網(wǎng)絡(luò)的工作原理

訓(xùn)練 MNIST 模型

借用 Gluon 里訓(xùn)練 MNIST 模型的 Python 程序,用 MXBoard 記錄下交叉熵、訓(xùn)練和測試精度、參數(shù)的梯度數(shù)據(jù)分布,可以實時反映出模型訓(xùn)練的進(jìn)度。

首先定義一個 SummaryWriter 的對象,

sw = SummaryWriter(logdir='./logs', flush_secs=5)

這里加了 flush_secs=5 是為了每五秒就寫一次記錄到文件,以便在瀏覽器中及時看到結(jié)果。接著在每個 mini-batch 循環(huán)結(jié)束時記錄下交叉熵,

sw.add_scalar(tag='cross_entropy', value=L.mean().asscalar(), global_step=global_step)

在每個 epoch 結(jié)束時記錄下參數(shù)的梯度為 HISTOGRAM,記錄下訓(xùn)練和測試精度為 SCALAR,

grads = [i.grad() for i in net.collect_params().values()]
assert len(grads) == len(param_names)
# logging the gradients of parameters for checking convergence
for i, name in enumerate(param_names):
   sw.add_histogram(tag=name, values=grads[i], global_step=epoch, bins=1000)

name, acc = metric.get()
# logging training accuracy
sw.add_scalar(tag='train_acc', value=acc, global_step=epoch)

name, val_acc = test(ctx)
# logging the validation accuracy
sw.add_scalar(tag='valid_acc', value=val_acc, global_step=epoch)

然后運行 Python 程序,并運行 TensorBoard,就可以在瀏覽器中看到以下效果了。小伙伴們可以嘗試著用 MXBoard 監(jiān)督訓(xùn)練更復(fù)雜神經(jīng)網(wǎng)絡(luò)。更多本實例的代碼和解說請點擊這里。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

可視化卷積層的 filters 和 feature maps

將卷積層的 filters 和 feature maps 當(dāng)成圖片可視化有兩個意義:

  1. 特征平滑規(guī)律的 filters 是模型訓(xùn)練良好的標(biāo)志之一,未收斂或過擬合模型的卷積層 filters 會出現(xiàn)很多 noise。

  2. 觀察 filters 和 feature maps 的圖片,特別是第一層卷積的圖片可以總結(jié)出該層所關(guān)注的圖片特征,這有助于我們理解卷積神經(jīng)網(wǎng)絡(luò)的工作原理。

這里將 MXNet Model Zoo 中三個 CNN 模型,Inception-BN,Resnet-152,和 VGG16 的 filters 當(dāng)成圖像輸出到 TensorBoard,并將這三組 filters 作用于一張黑天鵝的圖片(來自驗證數(shù)據(jù)集 val_256_q90.rec)上觀察 feature maps。

Inception-BN

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

Resnet-152

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

VGG16

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

可以看出三個模型的 filters 都表現(xiàn)出良好的光滑性和規(guī)律性,彩色 filters 負(fù)責(zé)提取原始圖片前景和背景的局部特征,灰白圖片負(fù)責(zé)提取圖片中物體的輪廓特征。復(fù)現(xiàn)代碼和解釋請點擊這里。

可視化圖片的 embedding

最后這個例子比較有趣。Embedding 在自然語言處理中是一個常用的概念,它是真實世界中物體在高維向量空間中的表示。我們也可以借用此概念到卷積神經(jīng)網(wǎng)絡(luò)中。卷積神經(jīng)網(wǎng)絡(luò)最后一個全連接層的輸出可以看成是一個 batch_size 行、num_labels 列的矩陣,每一行作為一個 num_labels 維的向量就是對應(yīng)輸入圖片的 embedding。本質(zhì)上這個 embedding 就是卷積神經(jīng)網(wǎng)絡(luò)對圖片的編碼,softmax 層通過此編碼來判斷圖片所屬類別。當(dāng)理解了圖片 embedding 的概念后,我們就可以把一個圖片集的所有 embedding 通過沒有 softmax 層的卷積神經(jīng)網(wǎng)絡(luò)求出來,調(diào)用 MXBoard 的 add_embedding API,從而來觀察他們在二維或者三維空間中的聚合效應(yīng),即同類別圖片應(yīng)該聚合在一起。

這里我們從上一個例子里的驗證數(shù)據(jù)集中隨機(jī)選取了 2304 張圖片,用 Resnet-152 模型算出了它們的 embeddings,用 MXBoard 寫入事件文件,并由 TensorBoard 讀取,效果如下。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

這里2304張圖片的 embeddings 默認(rèn)由 PCA 算法壓縮到了三維空間,不過圖片聚合效應(yīng)似乎不是那么明顯,這是因為 PCA 算法不能保持原始物體之間的空間關(guān)系。因此,我們選用 TensorBoard 界面上提供的 t-SNE 算法,重新對 embeddings 進(jìn)行降維操作,這是個動態(tài)的過程。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

隨著 t-SNE 算法的收斂,可以很明顯地看到圖片集在三維空間中被分成了幾類。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

最后我們來驗證一下圖片分類是否正確。在 TensorBoard GUI的右上角輸入“dog”,所有打了“dog”標(biāo)記的圖片將被高亮。拖動并放大至高亮圖片處,可以看到很多狗的圖片,這表明預(yù)訓(xùn)練的 Resnet-152 模型是準(zhǔn)確的。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

全部代碼和具體說明請點這里。

后記

通過實戰(zhàn) MXBoard,我們可以看到,可視化工具在監(jiān)督訓(xùn)練模型和解釋深度學(xué)習(xí)原理方面的強(qiáng)大作用。MXBoard 給 MXNet 提供了一個在科研和生產(chǎn)環(huán)境中簡單、易用、集中的可視化方案。當(dāng)所有的代碼在后臺運行時,你需要的只是一個瀏覽器。

看了這么多,聰明的你是不是有很多精彩的可視化點子躍躍欲試呢?點擊文末鏈接分享炫酷圖片,讓 MXNet 動起來。

特別感謝鄭子豪在項目開發(fā)時提供的技術(shù)支持。

論壇討論鏈接

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

MXBoard — 助力 MXNet 數(shù)據(jù)可視化

分享:
相關(guān)文章

編輯

關(guān)注AI學(xué)術(shù),例如論文
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說