🧊
PlotNeuralNetの使い方
大学の実験レポートでCNNのモデル図を書けと指示されたので、PlotNeuralNetを用いて図を作成しました。多少コードを書く必要がありますが、自由度が高いのでかなり良かったです。
基本的には公式のGitHubを見れば分かりますが、備忘録としてもう少し詳しいその書き方・動かし方を書きます。半分くらい焼き直しです。
前提
Windows11(23H2)上のWSL(Ubuntu 22.04.2 LTS)で動作させます。
基本的にWindows上のVSCodeやExplorerを使う前提で書きます。
環境構築
- WSLを起動する。
- 以下のコマンドで、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
- 公式GitHubをクローンする。
こだわりがある方はディレクトリを変更してください。
git clone https://github.com/HarisIqbal88/PlotNeuralNet.git
- 当該ディレクトリに移動する。
cd PlotNeuralNet/
- tikzmake.shを修正する
\wsl.localhost\Ubuntu\home(name)\PlotNeuralNet\tikzmake.sh
の4行目の
python $1.py
を
python3 $1.py
に修正する。
- exampleファイルの実行
cd pyexamples/
bash ../tikzmake.sh test_simple
これにより、同ディレクトリに test_simple.pdf が作成されます。これが確認できたらOKです。
使い方
-
pythonファイルを作る
\wsl.localhost\Ubuntu\home(name)\PlotNeuralNet\(project)\(file).py -
(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()
- wsl上でコンパイル(?)する
cd (project)/
bash ../tikzmake.sh (file)
同ディレクトリに(file).pdfが生成されます。

Discussion