前言
Tensorflow中可以使用tensorboard這個強大的工具對計算圖、loss、網絡參數等進行可視化。本文并不涉及對tensorboard使用的介紹,而是旨在說明如何通過代碼對網絡權值和feature map做更靈活的處理、顯示和存儲。本文的相關代碼主要參考了github上的一個小項目,但是對其進行了改進。
原項目地址為(https://github.com/grishasergei/conviz)。
本文將從以下兩個方面進行介紹:
卷積知識補充
網絡權值和feature map的可視化
1. 卷積知識補充
為了后面方便講解代碼,這里先對卷積的部分知識進行一下簡介。關于卷積核如何在圖像的一個通道上進行滑動計算,網上有諸多資料,相信對卷積神經網絡有一定了解的讀者都應該比較清楚,本文就不再贅述。這里主要介紹一組卷積核如何在一幅圖像上計算得到一組feature map。
以從原始圖像經過第一個卷積層得到第一組feature map為例(從得到的feature map到再之后的feature map也是同理),假設第一組feature map共有64個,那么可以把這組feature map也看作一幅圖像,只不過它的通道數是64, 而一般意義上的圖像是RGB3個通道。為了得到這第一組feature map,我們需要64個卷積核,每個卷積核是一個k x k x 3的矩陣,其中k是卷積核的大?。僭O是正方形卷積核),3就對應著輸入圖像的通道數。下面我以一個簡單粗糙的圖示來展示一下圖像經過一個卷積核的卷積得到一個feature map的過程。
如圖所示,其實可以看做卷積核的每一通道(不太準確,將就一下)和圖像的每一通道對應進行卷積操作,然后再逐位置相加,便得到了一個feature map。
那么用一組(64個)卷積核去卷積一幅圖像,得到64個feature map就如下圖所示,也就是每個卷積核得到一個feature map,64個卷積核就得到64個feature map。
另外,也可以稍微換一個角度看待這個問題,那就是先讓圖片的某一通道分別與64個卷積核的對應通道做卷積,得到64個feature map的中間結果,之后3個通道對應的中間結果再相加,得到最終的feature map,如下圖所示:
可以看到這其實就是第一幅圖擴展到多卷積核的情形,圖畫得較為粗糙,有些中間結果和最終結果直接用了一樣的子圖,理解時請稍微注意一下。下面代碼中對卷積核進行展示的時候使用的就是這種方式,即對應著輸入圖像逐通道的去顯示卷積核的對應通道,而不是每次顯示一個卷積核的所有通道,可能解釋的有點繞,需要注意一下。通過下面這個小圖也許更好理解。
新聞熱點
疑難解答