學習資料:
- 一個神經網絡繪圖包
- latex 自帶 Tikz 畫圖包 Example: Kalman Filter System Model.
- 基於 Matplotlib 的Viznet
- 在線生成卷積網絡結構圖:ConvNetDraw
使用 Viznet 畫出神經網絡結構圖
'''
'''
import numpy as np
from viznet import connecta2a, node_sequence, NodeBrush, EdgeBrush, DynamicShow
def draw_feed_forward(ax, num_node_list):
'''
draw a feed forward neural network.
Args:
num_node_list (list<int>): 每層節點數組成的列表
'''
num_hidden_layer = len(num_node_list) - 2 # 隱藏層數
token_list = ['\sigma^z'] + \
['y^{(%s)}' % (i + 1) for i in range(num_hidden_layer)] + ['\psi']
kind_list = ['nn.input'] + ['nn.hidden'] * num_hidden_layer + ['nn.output']
radius_list = [0.3] + [0.2] * num_hidden_layer + [0.3] # 半徑大小
y_list = - 1.5 * np.arange(len(num_node_list)) # 每一層節點所在的位置的縱軸坐標,全取負值說明網絡是自頂而下的
seq_list = []
for n, kind, radius, y in zip(num_node_list, kind_list, radius_list, y_list):
b = NodeBrush(kind, ax)
seq_list.append(node_sequence(b, n, center=(0, y)))
eb = EdgeBrush('-->', ax)
for st, et in zip(seq_list[:-1], seq_list[1:]):
connecta2a(st, et, eb)
#for i, layer_nodes in enumerate(seq_list):
#[node.text('$z_%i^{(%i)}$'%(j, i), 'center', fontsize=16) for j, node in enumerate(layer_nodes)]
return seq_list
def real_bp():
with DynamicShow((6, 6), '_feed_forward.png') as d: # 隱藏坐標軸
seq_list = draw_feed_forward(d.ax, num_node_list=[5, 4, 1])
for i, layer_nodes in enumerate(seq_list):
[node.text('$z_{%i}^{(%i)}$'%(j, i), 'center', fontsize=16) for j, node in enumerate(layer_nodes)]
if __name__ == '__main__':
real_bp()
為了節省內存,最好將圖片保存為 .svg
格式。
在線生成卷積網絡結構圖
這個操作起來十分簡單,只需要輸入如下卷積神經網絡結構說明:
# Some example
input(28, 28, 1)
conv(24, 24, 8)
relu(24, 24, 8)
pool(12, 12, 8)
conv(10, 10, 16)
relu(10, 10, 16)
pool(4, 4, 16)
fullyconn(1, 1, 10)
softmax(1, 1, 10)
便可生成對應的網絡結構,即:
其他方式
可以參考我的博文:2 使用 NetworkX 畫神經網絡