🧊

PlotNeuralNetの使い方

に公開

大学の実験レポートでCNNのモデル図を書けと指示されたので、PlotNeuralNetを用いて図を作成しました。多少コードを書く必要がありますが、自由度が高いのでかなり良かったです。
基本的には公式のGitHubを見れば分かりますが、備忘録としてもう少し詳しいその書き方・動かし方を書きます。半分くらい焼き直しです。

前提

Windows11(23H2)上のWSL(Ubuntu 22.04.2 LTS)で動作させます。
基本的にWindows上のVSCodeやExplorerを使う前提で書きます。

環境構築

  1. WSLを起動する。
  2. 以下のコマンドで、texlive関連のパッケージをインストールする。
sudo apt-get install texlive-latex-base
sudo apt-get install texlive-fonts-recommended
sudo apt-get install texlive-fonts-extra
sudo apt-get install texlive-latex-extra
  1. 公式GitHubをクローンする。
    こだわりがある方はディレクトリを変更してください。
git clone https://github.com/HarisIqbal88/PlotNeuralNet.git
  1. 当該ディレクトリに移動する。
cd PlotNeuralNet/
  1. tikzmake.shを修正する
    \wsl.localhost\Ubuntu\home(name)\PlotNeuralNet\tikzmake.sh
    の4行目の
python $1.py

python3 $1.py

に修正する。

  1. exampleファイルの実行
cd pyexamples/
bash ../tikzmake.sh test_simple

これにより、同ディレクトリに test_simple.pdf が作成されます。これが確認できたらOKです。

使い方

  1. pythonファイルを作る
    \wsl.localhost\Ubuntu\home(name)\PlotNeuralNet\(project)\(file).py

  2. (file).pyを編集する
    だいたいコメントとして書いたのでわかると思います。

import sys

sys.path.append("../")
from pycore.tikzeng import *
from pycore.blocks import *

arch = [
    to_head(".."),
    to_cor(),
    to_begin(),
    # ↑ここまで変更しないべし↑
    # 入力層
    to_Conv(
        name="input",  # 内部処理用の名前
        s_filer=32,  # 記載される縦横サイズの数字
        n_filer=3,  # 記載される厚さの数字
        offset="(0,0,0)",  # toに対する位置
        to="(0,0,0)",  # offsetの原点
        height=32,  # 実際に描画される縦サイズ
        depth=32,  # 実際に描画される横サイズ
        width=2,  # 実際に描画される厚さ
        caption="Input",  # 記載される名前
    ),
    # 中間層
    to_Conv(
        name="conv1",
        s_filer=32,
        n_filer=64,
        offset="(2,0,0)",  # toに対して、0.5だけずれて表示されるの意
        to="(input-east)",  # offsetの原点はinputの右側という意味
        height=32,
        depth=32,
        width=6,
        caption="Conv2d",
    ),
    to_connection("input", "conv1"),  # inputからconv1へ矢印を描画
    to_Pool(
        name="pool2",
        offset="(0,0,0)",
        to="(conv1-east)",
        height=16,
        depth=16,
        width=6,
        opacity=0.5,
        caption="MaxPool",
    ),
    # ↓ここから変更しないべし↓
    to_end(),
]

def main():
    # スクリプト名をファイル名として取得
    namefile = str(sys.argv[0]).split(".")[0]
    # TeXファイルを生成
    to_generate(arch, namefile + ".tex")

if __name__ == "__main__":
    main()
  1. wsl上でコンパイル(?)する
cd (project)/
bash ../tikzmake.sh (file)

同ディレクトリに(file).pdfが生成されます。

Discussion