kaeken(嘉永島健司)のTech探究ブログ

主に情報科学/情報技術全般に関する知見をポストします。(最近は、特にData Science、機械学習、深層学習、統計学、Python、数学、ビッグデータ)

ニューラルネットワークを図解するためグラフ描画ツールgraphviz導入

こんな感じのグラフがスクリプトで作成できるgraphviz f:id:kaeken:20161108200731p:plain

以下、ギャラリー。

Gallery | Graphviz - Graph Visualization Software

まずは、インストール。

# まずは、Anacondaでgraphvizパッケージをインストール
conda install -c anaconda graphviz=2.38.0
# が、importできず、改めてpipで入れなおし
pip install graphviz

# 確認
dot -V
dot - graphviz version 2.38.0 (20140413.2041)

次に、dotファイル。

# cat neuralnet.dot


digraph G {

  rankdir=LR
  splines=line
  nodesep=.05;

  node [label=""];

  subgraph cluster_0 {
  color=white;
  node [style=solid,color=blue4, shape=circle];
  x1 [label="x1"];
  x2 [label="x2"];
  label = "input";
  }

  subgraph cluster_1 {
  color=white;
  node [style=solid,color=red2, shape=circle];
  a12 a22 a32;
  label = "layer 2";
  }

  subgraph cluster_2 {
  color=white;
  node [style=solid,color=red2, shape=circle];
  a13 a23;
  label = "layer 3";
  }

  subgraph cluster_3 {
  color=white;
  node [style=solid,color=seagreen2, shape=circle];
  y1 [label="y1"];
  y2 [label="y2"];
  label="output";
  }

  x1 -> a12;
  x1 -> a22;
  x1 -> a32;

  x2 -> a12;
  x2 -> a22;
  x2 -> a32;

  a12 -> a13
  a22 -> a13
  a32 -> a13

  a12 -> a23
  a22 -> a23
  a32 -> a23

  a13 -> y1
  a23 -> y1

  a13 -> y2
  a23 -> y2
}

最後に、画像出力。

# dot -Tpng -O neuralnet.dot

ただ、手元の環境だとなぜかラベルがASCIIなのに文字化けるので、オンライン上で実行できるサービスを探してみると、いろいろある。

http://www.webgraphviz.com/

ただ、ソースを貼って実行するだけ。

一方、こちらは、 HTMLのimageタグにそのままdotファイル内の記述をsrcに指定してやれば画像生成される便利なサービス

http://www.gravizo.com/

こんな感じで指定。面白い。

<img src='http://g.gravizo.com/g?
 digraph G {
   main -> parse -> execute;
   main -> init;
   main -> cleanup;
   execute -> make_string;
   execute -> printf
   init -> make_string;
   main -> printf;
   execute -> compare;
 }
'/>