python绘制神经网络(转载)

来源:互联网 发布:超星网络课答案 编辑:程序博客网 时间:2024/06/15 01:38

转载自http://blog.csdn.net/rtygbwwwerr/article/details/50937643

代码是别人写的,研究了下详细的用法,如下:

makeNN.py

import os  import sysimport platformfrom string import Templatedef makeNode(index,start=0,shape='circle',num=3,height='.5'):    code = Template('''    node [shape=$shape,height=$height];\n    $nodes;\n    ''')    node_set=[];    nodes=''    for i in range(num):        n = 'a%d' %index + '%d' %(start+i)        node_set.append(n)        nodes = nodes + (n + ' ')        str = code.substitute(index=index, shape=shape, nodes=nodes,height=height)    return node_set,strdef makeLayer(index,color='red2',node_num=3, maxNum=2,name=''):    code = Template('''subgraph cluster_$index {\n     color=white;\n    node [style=solid,color=$color];\n    $nodesB$nodesM$nodesE    label = "layer $name($node_num)";\n    }\n    ''')    nodesB=''    nodesM=''    nodesE=''    node_set=[];    if node_num > maxNum:        headNum = maxNum // 2        bset,nodesB = makeNode(index=index,num=headNum)        _,nodesM = makeNode(index=index,start=headNum,shape='point',height='.02')        eset,nodesE = makeNode(index=index,start=(node_num-headNum),num=headNum)        node_set = (bset+eset)    else:        nodes,nodesM = makeNode(index=index,num=node_num)        node_set = nodes    if name=='':        name = index    str = code.substitute(index=index,name=name, color=color, nodesB=nodesB,nodesM=nodesM,nodesE=nodesE,node_num=node_num)    return node_set,strdef makeLines(connects,node_sets):    str=''    for c in connects:        for i1 in node_sets[c[0]]:            for i2 in node_sets[c[1]]:                str = str + (i1 + ' -> ' + i2) + '\n'    return str;def makeFrame(args):    code = Template('''digraph G {\n     rankdir=LR\n    splines=line\n    nodesep=.05;\n    node [label=""];\n    $layers\n    $lines\n    }     ''')    node_sets=[]    layer_num = args["layers_num"]    layers_cfg = args['layers_cfg']    connects = args['connects']    visual_num = args['visual_num']    layers = '';    for i in range(layer_num):        node_set,str = makeLayer(i,layers_cfg[i][2],layers_cfg[i][1],visual_num,layers_cfg[i][0])        node_sets.append(node_set)        layers = layers + str        lines = makeLines(connects,node_sets)    return code.substitute(layers=layers,lines=lines)def saveFile(str, path):      print (path)    f = open(path,'w')      f.write(str)    f.close()    def isWindowsSystem():    return 'Windows' in platform.system() def makeConfig():    args = sys.argv[1:]    if len(args) == 0:       args = makeDefConfig()    else:              fp =  open(args[0],'r')        args = dict()        line = fp.readline();        while line:            if line.index('#') > 1:                item = line.split(':')                args.update({item[0]:item[1]})        line = fp.readline()    return argsdef makeDefConfig():    args = dict()    #path    path = sys.argv[0]    if isWindowsSystem():        last = path.rindex('\\')    else:        last = path.rindex('/')        path = path[0:last+1]    args.update({'input':path + 'nn.gv'})    args.update({'output':path + 'nn.png'})    #layer number    args.update({'visual_num':10})    #layers config:(name,nodes number,color)    args.update({'layers_cfg':(('input',10,'blue4'),('h1',7,'red2'),('h2',5,'red2'),('h3',4,'red2'),('out',2,'seagreen2'))})    layers = args['layers_cfg']    args.update({'layers_num':len(layers)})    #connects:layer_i->lay_j    args.update({'connects':([0,1],[1,2],[2,3],[3,4])})    return argsif __name__ == "__main__":    args = makeConfig()        str = makeFrame(args)    saveFile(str, args['input'])    cmd = 'dot ' + args['input'] + ' -Tpng -o ' + args['output']os.system(cmd)


nn.py


digraph G {     rankdir=LR    splines=line    nodesep=.05;    node [label=""];    subgraph cluster_0 {     color=white;    node [style=solid,color=blue4];        node [shape=circle,height=.5];    a00 a01 a02 a03 a04 a05 a06 a07 a08 a09 ;        label = "layer input(10)";    }    subgraph cluster_1 {     color=white;    node [style=solid,color=red2];        node [shape=circle,height=.5];    a10 a11 a12 a13 a14 a15 a16 ;        label = "layer h1(7)";    }    subgraph cluster_2 {     color=white;    node [style=solid,color=red2];        node [shape=circle,height=.5];    a20 a21 a22 a23 a24 ;        label = "layer h2(5)";    }    subgraph cluster_3 {     color=white;    node [style=solid,color=red2];        node [shape=circle,height=.5];    a30 a31 a32 a33 ;        label = "layer h3(4)";    }    subgraph cluster_4 {     color=white;    node [style=solid,color=seagreen2];        node [shape=circle,height=.5];    a40 a41 ;        label = "layer out(2)";    }        a00 -> a10a00 -> a11a00 -> a12a00 -> a13a00 -> a14a00 -> a15a00 -> a16a01 -> a10a01 -> a11a01 -> a12a01 -> a13a01 -> a14a01 -> a15a01 -> a16a02 -> a10a02 -> a11a02 -> a12a02 -> a13a02 -> a14a02 -> a15a02 -> a16a03 -> a10a03 -> a11a03 -> a12a03 -> a13a03 -> a14a03 -> a15a03 -> a16a04 -> a10a04 -> a11a04 -> a12a04 -> a13a04 -> a14a04 -> a15a04 -> a16a05 -> a10a05 -> a11a05 -> a12a05 -> a13a05 -> a14a05 -> a15a05 -> a16a06 -> a10a06 -> a11a06 -> a12a06 -> a13a06 -> a14a06 -> a15a06 -> a16a07 -> a10a07 -> a11a07 -> a12a07 -> a13a07 -> a14a07 -> a15a07 -> a16a08 -> a10a08 -> a11a08 -> a12a08 -> a13a08 -> a14a08 -> a15a08 -> a16a09 -> a10a09 -> a11a09 -> a12a09 -> a13a09 -> a14a09 -> a15a09 -> a16a10 -> a20a10 -> a21a10 -> a22a10 -> a23a10 -> a24a11 -> a20a11 -> a21a11 -> a22a11 -> a23a11 -> a24a12 -> a20a12 -> a21a12 -> a22a12 -> a23a12 -> a24a13 -> a20a13 -> a21a13 -> a22a13 -> a23a13 -> a24a14 -> a20a14 -> a21a14 -> a22a14 -> a23a14 -> a24a15 -> a20a15 -> a21a15 -> a22a15 -> a23a15 -> a24a16 -> a20a16 -> a21a16 -> a22a16 -> a23a16 -> a24a20 -> a30a20 -> a31a20 -> a32a20 -> a33a21 -> a30a21 -> a31a21 -> a32a21 -> a33a22 -> a30a22 -> a31a22 -> a32a22 -> a33a23 -> a30a23 -> a31a23 -> a32a23 -> a33a24 -> a30a24 -> a31a24 -> a32a24 -> a33a30 -> a40a30 -> a41a31 -> a40a31 -> a41a32 -> a40a32 -> a41a33 -> a40a33 -> a41    }     


nna.gv

digraph G {     rankdir=LR    splines=line    nodesep=.05;    node [label=""];    subgraph cluster_0 {     color=white;    node [style=solid,color=blue4, shape=circle];    x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37 x38 x39 x40 x41 x42 x43 x44 x45 x46 x47 x48 x49 x50 x51 x52 x53 x54 x55 x56 x57 x58 x59 x60 x61 x62 x63 x64 x65 x66 x67 x68 x69 x70 x71 x72 x73 x74 x75 x76 x77 x78 x79 x80 x81 x82 x83 x84 x85 x86 x87 x88 x89 x90 x91 x92 x93 x94 x95 x96 x97 x98 x99 ;    label = "layer 0";    }    subgraph cluster_1 {     color=white;    node [style=solid,color=red2, shape=circle];    a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a110 a111 a112 a113 a114 a115 a116 a117 a118 a119 a120 a121 a122 a123 a124 a125 a126 a127 a128 a129 a130 a131 a132 a133 a134 a135 a136 a137 a138 a139 a140 a141 a142 a143 a144 a145 a146 a147 a148 a149 a150 a151 a152 a153 a154 a155 a156 a157 a158 a159 a160 a161 a162 a163 a164 a165 a166 a167 a168 a169 a170 a171 a172 a173 a174 a175 a176 a177 a178 a179 a180 a181 a182 a183 a184 a185 a186 a187 a188 a189 a190 a191 a192 a193 a194 a195 a196 a197 a198 a199 a1100 a1101 a1102 a1103 a1104 a1105 a1106 a1107 a1108 a1109 a1110 a1111 a1112 a1113 a1114 a1115 a1116 a1117 a1118 a1119 ;    label = "layer 1";    }    subgraph cluster_2 {     color=white;    node [style=solid,color=red2, shape=circle];    a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a210 a211 a212 a213 a214 a215 a216 a217 a218 a219 a220 a221 a222 a223 a224 a225 a226 a227 a228 a229 a230 a231 a232 a233 a234 a235 a236 a237 a238 a239 a240 a241 a242 a243 a244 a245 a246 a247 a248 a249 a250 a251 a252 a253 a254 a255 a256 a257 a258 a259 a260 a261 a262 a263 a264 a265 a266 a267 a268 a269 a270 a271 a272 a273 a274 a275 a276 a277 a278 a279 a280 a281 a282 a283 a284 a285 a286 a287 a288 a289 a290 a291 a292 a293 a294 a295 a296 a297 a298 a299 a2100 a2101 a2102 a2103 a2104 a2105 a2106 a2107 a2108 a2109 a2110 a2111 a2112 a2113 a2114 a2115 a2116 a2117 a2118 a2119 ;    label = "layer 2";    }    subgraph cluster_3 {     color=white;    node [style=solid,color=red2, shape=circle];    a30 a31 a32 a33 a34 a35 a36 a37 a38 a39 a310 a311 a312 a313 a314 a315 a316 a317 a318 a319 a320 a321 a322 a323 a324 a325 a326 a327 a328 a329 a330 a331 a332 a333 a334 a335 a336 a337 a338 a339 a340 a341 a342 a343 a344 a345 a346 a347 a348 a349 a350 a351 a352 a353 a354 a355 a356 a357 a358 a359 a360 a361 a362 a363 a364 a365 a366 a367 a368 a369 a370 a371 a372 a373 a374 a375 a376 a377 a378 a379 a380 a381 a382 a383 a384 a385 a386 a387 a388 a389 a390 a391 a392 a393 a394 a395 a396 a397 a398 a399 a3100 a3101 a3102 a3103 a3104 a3105 a3106 a3107 a3108 a3109 a3110 a3111 a3112 a3113 a3114 a3115 a3116 a3117 a3118 a3119 a3120 a3121 a3122 a3123 a3124 a3125 a3126 a3127 a3128 a3129 a3130 a3131 a3132 a3133 a3134 a3135 a3136 a3137 a3138 a3139 a3140 a3141 a3142 a3143 a3144 a3145 a3146 a3147 a3148 a3149 ;    label = "layer 3";    }    subgraph cluster_4 {     color=white;    node [style=solid,color=seagreen2, shape=circle];    a40 a41 ;    label = "layer 4";    }        x0 -> a10x0 -> a11x0 -> a12x0 -> a13x0 -> a14x0 -> a15x0 -> a16x0 -> a17x0 -> a18x0 -> a19x0 -> a110x0 -> a111x0 -> a112x0 -> a113x0 -> a114x0 -> a115x0 -> a116x0 -> a117x0 -> a118x0 -> a119x0 -> a120x0 -> a121x0 -> a122x0 -> a123x0 -> a124x0 -> a125x0 -> a126x0 -> a127x0 -> a128x0 -> a129x0 -> a130x0 -> a131x0 -> a132x0 -> a133x0 -> a134x0 -> a135x0 -> a136x0 -> a137x0 -> a138x0 -> a139x0 -> a140x0 -> a141x0 -> a142x0 -> a143x0 -> a144x0 -> a145x0 -> a146x0 -> a147x0 -> a148x0 -> a149x0 -> a150x0 -> a151x0 -> a152x0 -> a153x0 -> a154x0 -> a155x0 -> a156x0 -> a157x0 -> a158x0 -> a159x0 -> a160x0 -> a161x0 -> a162x0 -> a163x0 -> a164x0 -> a165x0 -> a166x0 -> a167x0 -> a168x0 -> a169x0 -> a170x0 -> a171x0 -> a172x0 -> a173x0 -> a174x0 -> a175x0 -> a176x0 -> a177x0 -> a178x0 -> a179x0 -> a180x0 -> a181x0 -> a182x0 -> a183x0 -> a184x0 -> a185x0 -> a186x0 -> a187x0 -> a188x0 -> a189x0 -> a190x0 -> a191x0 -> a192x0 -> a193x0 -> a194x0 -> a195x0 -> a196x0 -> a197x0 -> a198x0 -> a199x0 -> a1100x0 -> a1101x0 -> a1102x0 -> a1103x0 -> a1104x0 -> a1105x0 -> a1106x0 -> a1107x0 -> a1108x0 -> a1109x0 -> a1110x0 -> a1111x0 -> a1112x0 -> a1113x0 -> a1114x0 -> a1115x0 -> a1116x0 -> a1117x0 -> a1118x0 -> a1119x1 -> a10x1 -> a11x1 -> a12x1 -> a13x1 -> a14x1 -> a15x1 -> a16x1 -> a17

config.txt
#[*.gv,*.png]=current dir/nn.gv,current dir/nn.pngpath:,#([visual node number]=3,<([layer name]=layer index,[layer nodes number]=3,[nodes color]='red2')>)node:(3,('input',1,'blue4'),('h2',5,'red2'),('h3',5,'red2'),('h4',5,'red2'),('h5',2,'seagreen2'))#(<[layer1,layer2],...[layeri,layerj]>);connects from layer i to layer j(full connect)connect:([0,1],[0,2],[0,3],[1,4],[2,4],[3,4])

然后把上面四个文件放入一个叫src的文件夹中,在pycharm中运行makeNN.py以后,在src文件夹中会生成一个图片,如下: