概要
説明資料を作るときに意外と書くのが面倒なニューラルネットワークの構成図を、PythonのPydotplus(又はPydot)からGraphvizを使って簡単に作るモジュール(neuralViz)を作成しました。以下イメージです。

構成を記載するだけで使えるように作っています。
neuralViz([4, 5, 5, 3])
環境構築
Anacondaがインストールされている前提で、本モジュールを使うために以下の環境を導入してください。
- GraphVizのインストール
以下サイトからインストールしてください。
windows | Graphviz – Graph Visualization Software - Pydotplusのインストール(Python2系の場合はPydot)
「pip install pydotplus」でOKです。
プログラム
以下がソースコードです。適当に張り付けて使ってください。
#必要なモジュールのインポート
import numpy as np
import pydotplus
def neuralViz(shape, fileName='default.png', plot=True, Wlist=None):
#形状をnp配列に変換
args = np.array(shape)
#空のmatrixを作成(adjacency_matrix作成用)
matrix = np.zeros((args.sum(), args.sum()))
#結合の強さに関するmatrixを取得したいときに使います。(本記事では未使用)
if Wlist is not None:
wmatrix = np.zeros((args.sum(), args.sum()))
#結ぶノード間に1を入力
for i in range(len(args)-1):
tmp1 = args[:i+1].sum()
tmp0 = args[:i].sum()
matrix[tmp1:tmp1+args[i+1],tmp0:tmp0+args[i]] = 1
if Wlist is not None:
wmatrix[tmp1:tmp1+args[i+1],tmp0:tmp0+args[i]] = Wlist[i].data
#GraphVizの機能を使って描画
g=pydotplus.graph_from_adjacency_matrix(matrix.T.tolist(), node_prefix=0)
#何もしないとNodeが作られないので足す。ついでに文字を消す。
for i in range(args.sum()):
n = pydotplus.Node(i+1)
n.set_fontsize(0)
g.add_node(n)
if plot == True:
#グラフ書き出し('default.png')
g.write_png(fileName, prog='dot')
else:
return g, matrix.T, wmatrix.T
いろいろ試してみる
せっかく作ったのでいろいろ試してみました。
単純・複雑な構成にトライ
ちょっと複雑な構成。
neuralViz([3, 4, 6, 3, 2, 5])

逆に単純な構成。
neuralViz([1, 1, 1])

どちらもうまく描けてます。
ノードの文字色や塗りつぶし色を変えてみる
gを返すように改造すると、g.get_node_list()やg.get_edge_list()でノードやエッジの情報を編集できるので試してみました。
#まずモデル作成(モジュールの最後にreturn gを追加してください)
g = neuralViz([3, 5, 5, 4])
#ノード一覧を取得
nodeList = g.get_node_list()
#適当なノードを選択しいろいろ編集
node = nodeList[10]
node.set_color('green')
node.set_style('filled')
node = nodeList[11]
node.set_color('red')
#書き出し
g.write_png("test.png", prog='dot')

是非試してみてください。