yuml/python > Deep learning용 네트워크 그리기 > v0.1-v0.5: N층+dropout까지

운영 환경
Ubuntu 14.04 LTS desktop amd64
Python 2.7.6

Deep Learning의 넷을 설명할 때 그리기를 하는 것이 귀찮습니다.
코드로 쉽게 만들 수 없을까. 

yUML 형식으로 사용해 보세요.
참고 ぃ tp // 이 m / 츠키요 3 / ms / 840b52027 03d270b0

v0.1: 1층만



draw.py
print "![](http://yuml.me/diagram/class/",
for elem in ('b','c','d','e'):
    print "[a]-->[" + elem + "],",

print ")"
python draw.py의 출력 결과는 다음과 같습니다.
![](http://yuml.me/diagram/class/ [a]-->[b], [a]-->[c], [a]-->[d], [a]-->[e], )

상기의 텍스트를 Qiita에 그대로 붙이면 이하가 된다.

10층이나 만들 수 있을까. 렌더링이 무거워질 수 있습니다. v0.2: 2층만 draw.py print # for empty line print "![](http://yuml.me/diagram/class/", for outer in ('x','y','z'): for inner in ('b','c','d','e'): print "[" + outer + "]-->[" + inner + "],", print ")" print # for empty line ![](http://yuml.me/diagram/class/ [x]-->[b], [x]-->[c], [x]-->[d], [x]- ->[e], [y]-->[b], [y]-->[c], [y]-->[d], [y]-->[e], [z]- ->[b], [z]-->[c], [z]-->[d], [z]-->[e], ) Fully connected network 전용. v0.3: 3층만 층을 늘리는 것은 귀찮습니다. draw.py print # for empty line hidden1=('x','y','z') hidden2=('a','b','c','d') hidden3=('l','m','n','o') print "![](http://yuml.me/diagram/class/", for outer in hidden1: for inner in hidden2: print "[" + outer + "]-->[" + inner + "],", for outer in hidden2: for inner in hidden3: print "[" + outer + "]-->[" + inner + "],", print ")" print # for empty line ![](http://yuml.me/diagram/class/ [x]-->[a], [x]-->[b], [x]-->[c], [x]- ->[d], [y]-->[a], [y]-->[b], [y]-->[c], [y]-->[d], [z]- ->[a], [z]-->[b], [z]-->[c], [z]-->[d], [a]-->[l], [a]- ->[m], [a]-->[n], [a]-->[o], [b]-->[l], [b]-->[m], [b]- ->[n], [b]-->[o], [c]-->[l], [c]-->[m], [c]-->[n], [c]- ->[o], [d]-->[l], [d]-->[m], [d]-->[n], [d]-->[o], ) v0.4: N 레이어 draw.py print # for empty line hidden=[ ( 'x', 'y', 'z'), ('a','b','c','d'), ('e','f','g','h'), ('i','j','k','l'), ('m','n','o','p') ] print "![](http://yuml.me/diagram/class/", for idx in range(4): for outer in hidden[idx]: for inner in hidden[idx+1]: print "[" + outer + "]-->[" + inner + "],", print ")" print # for empty line ![](http://yuml.me/diagram/class/ [x]-->[a], [x]-->[b], [x]-->[c], [x]- ->[d], [y]-->[a], [y]-->[b], [y]-->[c], [y]-->[d], [z]- ->[a], [z]-->[b], [z]-->[c], [z]-->[d], [a]-->[e], [a]- ->[f], [a]-->[g], [a]-->[h], [b]-->[e], [b]-->[f], [b]- ->[g], [b]-->[h], [c]-->[e], [c]-->[f], [c]-->[g], [c]- ->[h], [d]-->[e], [d]-->[f], [d]-->[g], [d]-->[h], [e]- ->[i], [e]-->[j], [e]-->[k], [e]-->[l], [f]-->[i], [f]- ->[j], [f]-->[k], [f]-->[l], [g]-->[i], [g]-->[j], [g]- ->[k], [g]-->[l], [h]-->[i], [h]-->[j], [h]-->[k], [h]- ->[l], [i]-->[m], [i]-->[n], [i]-->[o], [i]-->[p], [j]- ->[m], [j]-->[n], [j]-->[o], [j]-->[p], [k]-->[m], [k]- ->[n], [k]-->[o], [k]-->[p], [l]-->[m], [l]-->[n], [l]- ->[o], [l]-->[p], )

draw.py
import numpy as np
from numpy.random import *

print # for empty line

hidden=[
    ('x','y','z'),
    ('a','b','c','d'),
    ('e','f','g','h'),
    ('i','j','k','l'),
    ('m','n','o','p')
    ]

print "![](http://yuml.me/diagram/class/",

rand(10)

for idx in range(4):
    for outer in hidden[idx]:
        for inner in hidden[idx+1]:
            val = rand()
            if val > 0.5:
                print "[" + outer + "]-->[" + inner + "],",
            else:
                print "[" + outer + "]-.->[" + inner + "],",                
print ")"

print # for empty line
![](http://yuml.me/diagram/class/ [x]-.->[a], [x]-.->[b], [x]-.->[c], [x]-->[d], [y]-->[a], [y]-.->[b], [y]-->[c], [y]-->[d], [z]-.->[a], [z]-.->[b], [z]-->[c], [z]-->[d], [a]-.->[e], [a]-.->[f], [a]-->[g], [a]-->[h], [b]-.->[e], [b]-.->[f], [b]-->[g], [b]-.->[h], [c]-.->[e], [c]-.->[f], [c]-.->[g], [c]-->[h], [d]-.->[e], [d]-.->[f], [d]-.->[g], [d]-.->[h], [e]-.->[i], [e]-.->[j], [e]-.->[k], [e]-.->[l], [f]-->[i], [f]-->[j], [f]-.->[k], [f]-.->[l], [g]-->[i], [g]-->[j], [g]-.->[k], [g]-->[l], [h]-.->[i], [h]-->[j], [h]-->[k], [h]-->[l], [i]-.->[m], [i]-.->[n], [i]-.->[o], [i]-->[p], [j]-->[m], [j]-->[n], [j]-->[o], [j]-->[p], [k]-->[m], [k]-->[n], [k]-.->[o], [k]-->[p], [l]-.->[m], [l]-->[n], [l]-->[o], [l]-->[p], )
v0.5: N 레이어 + dropout dropout을 점선으로 표시합니다. 그리지 않는다는 것도 좋다.

좋은 웹페이지 즐겨찾기