Pytorch 網絡結構可視化

2021-03-02 深度學習這件小事

作者:田海山

https://zhuanlan.zhihu.com/p/66320870

安裝

可以通過以下的命令進行安裝

conda install pytorch-nightly -c pytorch
conda install graphviz
conda install torchvision
conda install tensorwatch

本教程基於以下的版本:

torchvision.__version__ '0.2.1'
torch.__version__ '1.2.0.dev20190610'
sys.version '3.6.8 |Anaconda custom (64-bit)| (default, Dec 30 2018, 01:22:34)
[GCC 7.3.0]'

載入庫

import sys
import torch
import tensorwatch as tw
import torchvision.models

網絡結構可視化

alexnet_model = torchvision.models.alexnet()
tw.draw_model(alexnet_model, [1, 3, 224, 224])

載入alexnet,draw_model函數需要傳入三個參數,第一個為model,第二個參數為input_shape,第三個參數為orientation,可以選擇'LR'或者'TB',分別代表左右布局與上下布局。

在notebook中,執行完上面的代碼會顯示如下的圖,將網絡的結構及各個層的name和shape進行了可視化。

統計網絡參數

可以通過model_stats方法統計各層的參數情況。

tw.model_stats(alexnet_model, [1, 3, 224, 224])

[MAdd]: Dropout is not supported!
[Flops]: Dropout is not supported!
[Memory]: Dropout is not supported!
[MAdd]: Dropout is not supported!
[Flops]: Dropout is not supported!
[Memory]: Dropout is not supported!
[MAdd]: Dropout is not supported!
[Flops]: Dropout is not supported!
[Memory]: Dropout is not supported!
[MAdd]: Dropout is not supported!
[Flops]: Dropout is not supported!
[Memory]: Dropout is not supported!
[MAdd]: Dropout is not supported!
[Flops]: Dropout is not supported!
[Memory]: Dropout is not supported!
[MAdd]: Dropout is not supported!
[Flops]: Dropout is not supported!
[Memory]: Dropout is not supported!

alexnet_model.features

Sequential(
(0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
(1): ReLU(inplace=True)
(2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
(3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(4): ReLU(inplace=True)
(5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
(6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(7): ReLU(inplace=True)
(8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(9): ReLU(inplace=True)
(10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace=True)
(12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
)

alexnet_model.classifier

Sequential(
(0): Dropout(p=0.5)
(1): Linear(in_features=9216, out_features=4096, bias=True)
(2): ReLU(inplace=True)
(3): Dropout(p=0.5)
(4): Linear(in_features=4096, out_features=4096, bias=True)
(5): ReLU(inplace=True)
(6): Linear(in_features=4096, out_features=1000, bias=True)
)

參考:

https://github.com/microsoft/tensorwatch

相關焦點

  • PyTorch模型訓練特徵圖可視化(TensorboardX)
    3、單通道特徵圖的可視化有時候我們需要把網絡內部分節點的特徵圖可視化出來,這時候上面的方法就不能用了,因為特徵圖的每個像素點上的數值範圍不是[0,1],而是可正可負,可大可小,因此需要做一些特殊處理(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0):更多其他參數的用法參見源碼:https://github.com/pytorch
  • LSTM模型結構的可視化
    ,其結構就很難理解了,同時其輸入輸出數據格式也很難理解,網絡上有很多介紹LSTM結構的文章,但是都不直觀,對初學者是非常不友好的。1、傳統的BP網絡和CNN網絡2、LSTM網絡3、LSTM的輸入結構4、pytorch中的LSTM4.1 pytorch中定義的LSTM模型4.2 餵給LSTM的數據格式4.3 LSTM的output格式5、LSTM和其他網絡組合BP網絡和CNN網絡沒有時間維,和傳統的機器學習算法理解起來相差無幾,CNN
  • 神經網絡結構可視化工具大全
    上面的這些圖片都是可以一鍵生成的,頓時覺得功能很強大的,各位在看網絡結構可視化的時候有沒有猜出來各個圖像對應的是哪一種模型結構呢?這個工具繪圖給我的第一感覺就是很樸素,這個號稱是完全基於Python編寫的神經網絡結構可視化工具,讀了源碼以後發現其實就是基於matplotlib做的封裝,不過效果還可以的吧,畢竟比較簡單嘛。
  • 用 PyTorch 實現一個簡單的分類器
    主要流程分為以下三個部分:1,自定義生成一個訓練集,具體為在二維平面上的一些點,分為兩類;2,構建一個淺層神經網絡,實現對特徵的擬合,主要是明白在 pytorch 中網絡結構如何搭建;3,完成訓練和測試部分的工作,熟悉 pytorch 如何對網絡進行訓練和測試。1.
  • 使用Pytorch和Matplotlib可視化卷積神經網絡的特徵
    選擇模型我們將使用ResNet-50神經網絡模型來可視化過濾器和特徵圖。使用ResNet-50模型來可視化過濾器和特徵圖並不理想。原因是resnet模型總的來說有點複雜。遍歷內部卷積層會變得非常困難。但是在本篇文章中您將了解如何訪問複雜體系結構的內部卷積層後,您將更加適應使用類似的或更複雜的體系結構。我使用的圖片來自pexels。這是我為了訓練我的人臉識別分類器而收集的一幅圖像。
  • 雲計算學習:用PyTorch實現一個簡單的分類器
    主要流程分為以下三個部分:1,自定義生成一個訓練集,具體為在二維平面上的一些點,分為兩類;2,構建一個淺層神經網絡,實現對特徵的擬合,主要是明白在 pytorch 中網絡結構如何搭建;3,完成訓練和測試部分的工作,熟悉 pytorch 如何對網絡進行訓練和測試。1.
  • 【小白學PyTorch】18.TF2構建自定義模型
    Tensorflow2.0 | 16 TF2讀取圖片的方法擴展之Tensorflow2.0 | 15 TF2實現一個簡單的服裝分類任務小白學PyTorch | 14 tensorboardX可pytorch常見運算詳解小白學PyTorch | 9 tensor數據結構與存儲結構小白學PyTorch | 8 實戰之MNIST小試牛刀小白學PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解
  • OpenAI發布「顯微鏡」,可視化神經網絡內部結構
    意為可以像實驗室中的顯微鏡一樣工作,幫助AI研究人員更好地理解神經網絡的結構和特徵。顯微鏡地址:https://microscope.openai.com/models如上圖所示,初始版本包含8個計算機視覺領域的神經網絡模型。每個神經網絡都用可視化的形式展示了一些重要神經元的內部結構。
  • pytorch專題前言 | 為什麼要學習pytorch?
    2.為什麼要學習pytorch呢?3.學習了pytorch我怎麼應用呢?4.按照什麼順序去學習pytorch呢?5.網上那麼多資料如何選擇呢?現在開始逐一的對以上問題提出自己的看法,可能想的不夠周全,歡迎討論區一起探討!1.生物學科的朋友需要學編程麼?需要!
  • 搞懂Transformer結構,看這篇PyTorch實現就夠了
    "Attention is All You Need"[1] 一文中提出的Transformer網絡結構最近引起了很多人的關注。Transformer不僅能夠明顯地提升翻譯質量,還為許多NLP任務提供了新的結構。雖然原文寫得很清楚,但實際上大家普遍反映很難正確地實現。
  • 《PyTorch中文手冊》來了
    PyTorch 有許多優勢,如採用 Python 語言、動態圖機制、網絡構建靈活以及擁有強大的社群等。由於其靈活、動態的編程環境和用戶友好的界面,PyTorch 是快速實驗的理想選擇。神經網絡簡介第四節 卷積神經網絡卷積神經網絡
  • 輕鬆構建 PyTorch 生成對抗網絡(GAN)
    生成網絡產生『假』數據,並試圖欺騙判別網絡;判別網絡對生成數據進行真偽鑑別,試圖正確識別所有『假』數據。在訓練迭代的過程中,兩個網絡持續地進化和對抗,直到達到平衡狀態(參考:納什均衡),判別網絡無法再識別『假』數據,訓練結束。
  • (二)pytorch學習筆記
    (一)pytorch學習筆記(二)pytorch學習筆記關係擬合 (回歸)我會這次會來見證神經網絡是如何通過簡單的形式將一群數據用一條線條來表示. 或者說, 是如何在數據當中找到他們的關係, 然後用神經網絡模型來建立一個可以代表他們關係的線條.建立數據集我們創建一些假數據來模擬真實的情況.
  • 【Pytorch 】筆記八:Tensorboard 可視化與 Hook 機制
    好了,上面就是圖像的可視化的一些方法了。感覺常用的是最後這個網絡的結構summary。下面再介紹一些高級的一些東西了。4.3 CAM 可視化CAM:類激活圖, class activation map。這個東西的功能就是分析卷積神經網絡,當卷積神經網絡得到了輸出之後,可以分析我們的網絡是關注圖像的哪些部分而得到的這個結果。
  • R語言——神經網絡結果可視化
    神經網絡由大量的人工神經元聯結進行計算,大多數情況下人工神經網絡能在外界信息的基礎上改變內部結構,是一種自適應系統。全連接神經網絡(Multi-Layer Perception,MLP,或者叫多層感知機)是一種連接方式較為簡單的人工神經網絡結構,屬於前饋神經網絡的一種,主要有輸入層、隱藏層和輸出層構成。在機器學習中MLP較為常用,可用於分類和回歸。
  • PyTorch框架歷史和特性更迭與安裝過程
    在使用GPU(CUDA)運行環境的情況下,可以通過運行命令conda install pytorch torchvision cudatoolkit=10.0-c pytorch來安裝PyTorch和相關的依賴包。如果僅僅使用CPU來運行深度學習模型,可以通過運行命令conda install pytorch torchvision-c pytorch來安裝PyTorch和相關的依賴包。
  • 【乾貨】基於pytorch的CNN、LSTM神經網絡模型調參小結
    Demo Site:  https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-pytorchPytorch是一個較新的深度學習框架,是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。
  • PyTorch  深度學習新手入門指南
    有關詳細信息,請查看此q&a(https://discuss.pytorch.org/t/what-is-the-difference-between-tensors-and-variables-in-pytorch/4914)。  模塊 1:網絡類步驟1:繼承。
  • 卷積網絡可解釋性復現 | Grad-CAM | ICCV | 2017
    (下) Siamese Net分類服裝MNIST數據集(pytorch)孿生網絡入門(上) Siamese Net及其損失函數圖像分割必備知識點 | Unet++ 超詳解+註解圖像分割必備知識點 |因此很多學者提出了各種各樣的可視化來解釋的方法。我個人嘗試過的、可以從一定角度進行解釋的可視化方法有:t-sne降維,attention可視化,可變卷積的可視化等,但是其實這些的可視化方法,並不能直接的對模型進行解釋,只是能說明模型分類是準確的。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    圖是一種由節點(頂點)和邊構成的數據結構,是由有向的邊成對連接的頂點的集合。當你在 TensorFlow 中運行代碼時,計算圖是以靜態方式定義的。與外部世界的所有通信都是通過 tf.Sessionobject 和 tf.Placeholder 執行,它們是在運行時會被外部數據替換的張量。