第19章 視覺化網路架構

2022-08-12 10:30:24 字數 2397 閱讀 6994

我們還沒有討論的乙個概念是架構視覺化,即構建網路中節點和對應的連線的圖表並且將該圖表作為一副影象儲存到磁碟的過程。圖中的節點表示層,節點之間的連線表示資料通過網路的資料流。

在每層中這些圖通常包括下述部件:

(1)輸入卷大小;

(2)輸出卷大小;

(3)可選的層的名字。

我們通常使用網路架構視覺化,當(1)除錯我們自己的自定義網路架構和(2)出版的時候,這時架構視覺化要比原始碼以及涵蓋同樣資訊的**更加容易理解。在後續中,將看到如何使用keras構建架構視覺化,且將它作為一副圖儲存到磁碟上。

視覺化乙個模型的架構是極其重要的乙個除錯工具,特別是:

(1)在出版物中實現乙個架構,但是你對它不熟悉;

(2)實現你自己定義的網路架構。

簡短的說,架構視覺化驗證我們的假設,即**是否按照我們預定的想法在構建模型。通過檢查該輸出圖,可以檢查是否存在邏輯破綻。最常見的破綻包括:

(1)網路中不正確的層順序;

(2)在乙個conv或pool層後假設了乙個不正確的輸出卷大小。

無論什麼時候實現乙個網路架構的時候,我建議在conv或pool層的每乙個塊之後視覺化網路架構,這將驗證你的假設(更重要的是在網路早期發現錯誤)。

cnns中的bug不像應用程式中由邊界條件引起的其它邏輯bug一樣。而是,乙個cnn可能訓練的很好而且即使在不正確的層順序也獲得了合理的結果,但是如果你不能意識到這種錯誤的發生,你可能報告你的結果認為你做了一件事,實際上你卻做了另一件事。在後續中,我將幫助你視覺化網路架構來避免這種有問題的情況。

在ubuntu下直接sudo apt-get install graphviz即可安裝graphviz包。安裝完後需要安裝python包:pip install graphviz、pip install pydot。

在github的chapter19/下執行檔案python visualize_architecture.py即可在當前目錄下生成lenet.png檔案,該檔案記錄了網路流。

我們匯入需要建立的網路架構以及視覺化工具,然後構建模型,將模型視覺化然後儲存到檔案中即可。

執行後的lenet.png即為實際的網路視覺化圖。開啟後將看到下圖:

圖19.1/19.2 網路視覺化架構圖

如圖19.1和19.2所示的即為minivggnet架構圖,架構中的每乙個節點表示一層且連線到下一層,終止於softmax分類器。注意網路中的每一層是如何包含輸入和輸出大小的——這些值對應於卷進入該層和退出該層時空間維度的大小。

漫步在lenet架構,可看到輸入層接受乙個為28×28×1的輸入影象。該層的輸入和輸出尺寸是相同的,是由於該層僅是輸入資料的佔位符。

你可能奇怪資料尺寸(none, 28, 28, 1)中的none值,這個屬性表示我們實際的batch size。當視覺化網路架構時,keras不知道我們實際的batch size,因此置為none。在實際訓練時,我們可以設定為32、64、128等等任意我們確實合適的batch size。

下一步,我們的資料進入第乙個conv層,該層在輸入28×28×1上學習到20個核。第乙個conv的輸出為28×28×20,由於使用了zero padding我們保留了最初的輸入尺寸,但是通過學習20個核我們也改變了它的尺寸。

conv層之後是啟用層,按照定義該層不會改變輸入卷大小。但是乙個pool層會改變輸入卷大小,這裡輸入卷尺寸從28×28×20降為14×14×20。

第二個conv層接受14×14×20的輸入卷大小,但是通過學習50個核使得輸出卷大小為14×14×50。然後經過啟用層、pool層後輸出卷更改為7×7×50。

此時,我們應用fc層,為了完成它,7×7×50的輸入變為2450的列表(因為7*7*50=2450)。既然我們將網路的卷積部分的輸出flattened了,那麼我們可以接受2450的輸入大小且學習500個節點來應用fc層。然後跟著啟用層,之後再應用另乙個fc層,這次將500輸入將為10(即我們mnist資料集的類別標籤的總數目)。

最後,乙個softmax分類器將應用在這10個輸出上,給出我們最終的類別概率。

就像我們可以用**表達lenet架構,我們也可以用圖來視覺化模型本身。隨著你開始深度學習的旅行,我強烈建議你使用這段**來視覺化任何你的網路架構,特別是在你不熟悉它的時候。確保你理解了網路中的資料流並且理解在conv、pool和fc層之後的卷大小是如何改變的,這將使你對架構有更深入的理解而不是僅依賴**本身。

當實現我自己的網路架構的時候,隨著我在實際編碼的時候,我每2-3層塊結構時,我就會視覺化網路架構,確保我及早發現bug以及邏輯破綻。

Caffe網路視覺化

最近在學習caffe,但是作為曾經的windows深度使用者,還是比較習慣視覺化的介面。然而,caffe當然是在linux os x系統下更好啦,因為一般還是寫script在命令列裡面玩的。所以這樣就不直觀咯,為了能直觀地看清楚網路結構,而不是看prototxt腦補 視覺化就很重要了。幸好,開發ca...

資料視覺化 R語言實現網路視覺化

最近在學習貝葉斯網路,當用k2演算法建立了貝葉斯網路結構之後,用r語言工具可以很清楚地實現網路視覺化。例如,在鐵達尼號資料集中,最後生成的貝葉斯網路結構如下 age,portembarked,numparentschildren,age numparentschildren,passengercla...

精通CSS 第2章 視覺化格式模型

第2章 為樣式找到應用目標 選擇器 常用選擇器 1 類選擇器 2 後代選擇器 第三章 視覺化格式模型 3個最重要的css概念是浮動 定位 盒模型,這些概念控制在頁面上安排和顯示元素的方式 3.1 盒模型概述 外邊距疊加 外邊距 當二個或更多垂直外邊距相遇時,它們將形成乙個外邊距。這個外邊距的高度等於...