成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗(yà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í)踐角度來講,設(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í)時畫出梯度數(shù)據(jù)分布,可以很快發(fā)現(xiàn)并糾正梯度消失或者梯度爆炸的現(xiàn)象。再比如,詞嵌入(word embedding)的可視化表明文字根據(jù)語義在低維空間聚合成不同的流形(manifold),這也從數(shù)學(xué)上解釋了,為什么增加詞向量的維度可以更好地區(qū)分不同語義的聚類(低維空間纏繞的流形在高維可以分開)。優(yōu)秀可視化工具對深度學(xué)習(xí)的份量可見一斑。

    TensorBoard 的橫空出世給 TensorFlow 的使用者帶來了可視化的福音。我們曾聽到過很多用戶(包括企業(yè)用戶)介紹,選擇TensorFlow 是因?yàn)榭梢杂?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)中,這個類含有諸如記錄的文件地址、寫文件的頻率、寫文件的隊(duì)列大小等等信息,用戶可以根據(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,點(diǎn)擊 HISTOGRAM,就可以看到如下效果圖了。

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

    實(shí)戰(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ù)分布,可以實(shí)時反映出模型訓(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)

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

    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-BNResnet-152,和 VGG16 的 filters 當(dāng)成圖像輸出到 TensorBoard,并將這三組 filters 作用于一張黑天鵝的圖片(來自驗(yàn)證數(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)代碼和解釋請點(diǎn)擊這里。

    可視化圖片的 embedding

    最后這個例子比較有趣。Embedding 在自然語言處理中是一個常用的概念,它是真實(shí)世界中物體在高維向量空間中的表示。我們也可以借用此概念到卷積神經(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)該聚合在一起。

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

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

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

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

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

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

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

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

    全部代碼和具體說明請點(diǎn)這里

    后記

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

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

    特別感謝鄭子豪在項(xiàng)目開發(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料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗(yàn)證郵箱
    您的郵箱還未驗(yàn)證,完成可獲20積分喲!
    請驗(yàn)證您的郵箱
    立即驗(yàn)證
    完善賬號信息
    您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
    立即設(shè)置 以后再說