日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

卷积神经网络结构可视化工具PlotNeuralNet

發布時間:2024/4/11 卷积神经网络 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 卷积神经网络结构可视化工具PlotNeuralNet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

卷積神經網絡結構可視化

簡介

本文介紹的工具是針對卷積神經網絡示意圖可視化的,不包括算圖。(示意圖一般出現在論文中)常見的卷積神經網絡示意圖繪制工具不少,常用的主要有NN SVG、ConvNetDraw、PlotNeuralNet等。寫這篇重點介紹PlotNeuralNet的教程的原因是國內關于它的教程很少并且大都只是列舉了官方demo。個人覺得PlotNeuralNet是很好看、可定制程度高的卷積神經網絡可視化工具。

常見工具

NN SVG

這是我過去一段時間內比較喜歡用的,特點是很方便,提供給用戶的是個交互式的Web頁面。可以訪問 官方地址使用該工具,網站首頁截圖如下。

該工具的主要特點如下。

  • 方便,各層直接界面控制增減及變化。
  • 支持三種風格,選擇空間大。
  • 支持SVG格式下載。

缺點如下

  • 可視化界面的最大問題就是很多用戶期待的功能為考慮全面,定制程度低。
  • 各層連接不是很美觀。

ConvNetDraw

我從未使用過,很多博主推薦,但是觀感勸退了我。其官方地址可以訪問使用,首頁截圖如下。

特點如下。

  • 腳本化控制
  • 尺度自定義
  • 直觀

缺點如下。

  • 既沒有做到腳本化的自由度,又沒有做到交互界面的觀感。
  • 不好看。

PlotNeuralNet

可以訪問其Github官方地址下載該工具。

下面呈現的是前饋網絡的示意圖。

這是我極力推薦的工具,盡管它的上手難度略高于之前兩個,但學會之后很好用,不少論文就是使用這個工具可視化的。

其主要特點如下。

  • 腳本化,使用LaTex編寫或者使用Python腳本編寫結構模型,自由度高。

相關缺點如下。

  • 無交互界面,上手略有難度。

使用教程

說明

基于Linux或者有bash的環境,我只在Ubuntu系統下測試成功。(事實上,深度學習首選的環境之一就是Ubuntu。)這里只介紹Python腳本繪制的方式,不介紹LaTex方式。需要安裝前置軟件,如LaTex解析器(推薦安裝texlive。)。

前置準備

安裝textlive

調用LaTex解析生成PDF,需要安裝LaTex,這里使用TextLive。可以使用清華的鏡像源下載,Linux環境下執行下面的命令即可。該命令為下載鏡像到當前目錄,失敗則可能換源,去掉上述鏈接的最后文件,在瀏覽器中查看合適文件下載即可。
wget https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/texlive2019.iso

其他相關軟件包安裝

  • sudo apt-get install perl-tk
    • 安裝圖形界面
  • sudo mount -o loop texlive.iso /mnt
    • 掛載鏡像
  • cd /mnt
    • 切換到掛載目錄
  • sudo ./install-tl -gui
    • 使用圖形界面安裝
  • sudo apt-get install texlive-latex-extra
    • 安裝擴展包

下載源碼

使用Git將源碼倉庫clone到本地,命令如下。

git clone https://github.com/HarisIqbal88/PlotNeuralNet.git

源碼目錄結構

其中pycore下的tikzeng.py是核心文件,定義了繪圖過程(所有to開頭的函數),可以繪制的層,py腳本向LaTex的轉換。代碼比較易懂,這里不做解析了。

繪制圖形

一般將自己寫的py腳本放在clone的項目的pyexamples目錄下。源目錄下有兩個py腳本,對其進行詳細注釋,包含了常用的語法。

代碼1-test_simple.py

通過cd到pyexamples目錄執行bash ../tikzmake.sh test_simple(注意不加py后綴,且有些錯誤或者警告正常,觀察是否生成pdf文件即可。)具體代碼如下。

import sys sys.path.append('../') # 添加自定義庫的目錄 from pycore.tikzeng import * # 導入自定義庫# defined your arch arch = [# 添加頭to_head( '..' ),to_cor(),to_begin(),# 添加卷積層conv1to_Conv("conv1", 512, 64, offset="(0,0,0)", to="(0,0,0)", height=64, depth=64, width=2 ),# 卷積層conv1東側添加池化層pool1to_Pool("pool1", offset="(0,0,0)", to="(conv1-east)"),# 池化層pool1東側添加卷積層conv2to_Conv("conv2", 128, 64, offset="(1,0,0)", to="(pool1-east)", height=32, depth=32, width=2 ),# 建立pool1到conv2的連接箭頭to_connection( "pool1", "conv2"), # conv2東側添加pool2to_Pool("pool2", offset="(0,0,0)", to="(conv2-east)", height=28, depth=28, width=1),# pool1東側添加softmax層但是偏移3單位to_SoftMax("soft1", 10 ,"(3,0,0)", "(pool1-east)", caption="SOFT" ),# 建立pool2到soft1的連接箭頭to_connection("pool2", "soft1"), # 結束to_end()]def main():namefile = str(sys.argv[0]).split('.')[0]to_generate(arch, namefile + '.tex' )if __name__ == '__main__':main()

生成的PDF如下。

代碼2-unet.py

具體代碼如下。

import sys sys.path.append('../') from pycore.tikzeng import * from pycore.blocks import *arch = [ # 開頭to_head('..'), to_cor(),to_begin(),# 添加輸入層to_input( '../examples/fcn8s/cats.jpg' ),# 添加block1包含一個二重卷積接reluto_ConvConvRelu( name='ccr_b1', s_filer=500, n_filer=(64,64), offset="(0,0,0)", to="(0,0,0)", width=(2,2), height=40, depth=40 ),to_Pool(name="pool_b1", offset="(0,0,0)", to="(ccr_b1-east)", width=1, height=32, depth=32, opacity=0.5),# 添加三個block,每個包含三個二卷積加一池化*block_2ConvPool( name='b2', botton='pool_b1', top='pool_b2', s_filer=256, n_filer=128, offset="(1,0,0)", size=(32,32,3.5), opacity=0.5 ),*block_2ConvPool( name='b3', botton='pool_b2', top='pool_b3', s_filer=128, n_filer=256, offset="(1,0,0)", size=(25,25,4.5), opacity=0.5 ),*block_2ConvPool( name='b4', botton='pool_b3', top='pool_b4', s_filer=64, n_filer=512, offset="(1,0,0)", size=(16,16,5.5), opacity=0.5 ),# 瓶頸,為block5to_ConvConvRelu( name='ccr_b5', s_filer=32, n_filer=(1024,1024), offset="(2,0,0)", to="(pool_b4-east)", width=(8,8), height=8, depth=8, caption="Bottleneck" ),to_connection( "pool_b4", "ccr_b5"),# 解碼器# 多個block,每個為unconv*block_Unconv( name="b6", botton="ccr_b5", top='end_b6', s_filer=64, n_filer=512, offset="(2.1,0,0)", size=(16,16,5.0), opacity=0.5 ),to_skip( of='ccr_b4', to='ccr_res_b6', pos=1.25),*block_Unconv( name="b7", botton="end_b6", top='end_b7', s_filer=128, n_filer=256, offset="(2.1,0,0)", size=(25,25,4.5), opacity=0.5 ),to_skip( of='ccr_b3', to='ccr_res_b7', pos=1.25), *block_Unconv( name="b8", botton="end_b7", top='end_b8', s_filer=256, n_filer=128, offset="(2.1,0,0)", size=(32,32,3.5), opacity=0.5 ),to_skip( of='ccr_b2', to='ccr_res_b8', pos=1.25), *block_Unconv( name="b9", botton="end_b8", top='end_b9', s_filer=512, n_filer=64, offset="(2.1,0,0)", size=(40,40,2.5), opacity=0.5 ),to_skip( of='ccr_b1', to='ccr_res_b9', pos=1.25),to_ConvSoftMax( name="soft1", s_filer=512, offset="(0.75,0,0)", to="(end_b9-east)", width=1, height=40, depth=40, caption="SOFT" ),to_connection( "end_b9", "soft1"),# 結束to_end() ]def main():namefile = str(sys.argv[0]).split('.')[0]to_generate(arch, namefile + '.tex' )if __name__ == '__main__':main()

其執行結果如下圖。

補充說明

封裝的各類層函數都在tikzeng.py文件中,可以修改并使用。具體的代碼和結果可以在我的Github找到,歡迎star或者fork。實際項目請按照官方項目更新為主。

總結

以上是生活随笔為你收集整理的卷积神经网络结构可视化工具PlotNeuralNet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。