#matplotlib
#matplotlib
Вопрос:
Я хотел бы сделать визуализацию нейронной сети, и вес строки и цвет линии между узлами должны соответствовать значениям весов (положительный -> красный, отрицательный -> синий, а толщина линии должна меняться в зависимости от абсолютного значения) очень похожек иллюстрации NN-SVG ниже.
Я смог создать нейронную сеть, используя и показывая значение весов, показанное в коде и изображении результата ниже. Как я могу изменить код, чтобы получить график, как указано выше.
## Gist originally developed by @craffel and improved by @ljhuang2017
import matplotlib.pyplot as plt
import numpy as np
coefs_ = w
def draw_neural_net(ax, left, right, bottom, top, layer_sizes, coefs_):
'''
Draw a neural network cartoon using matplotilb.
:usage:
>>> fig = plt.figure(figsize=(12, 12))
>>> draw_neural_net(fig.gca(), .1, .9, .1, .9, [4, 7, 2])
:parameters:
- ax : matplotlib.axes.AxesSubplot
The axes on which to plot the cartoon (get e.g. by plt.gca())
- left : float
The center of the leftmost node(s) will be placed here
- right : float
The center of the rightmost node(s) will be placed here
- bottom : float
The center of the bottommost node(s) will be placed here
- top : float
The center of the topmost node(s) will be placed here
- layer_sizes : list of int
List of layer sizes, including input and output dimensionality
'''
n_layers = len(layer_sizes)
v_spacing = (top - bottom)/float(max(layer_sizes))
h_spacing = (right - left)/float(len(layer_sizes) - 1)
# Input-Arrows
layer_top_0 = v_spacing*(layer_sizes[0] - 1)/2. (top bottom)/2.
for m in range(layer_sizes[0]):
plt.arrow(left-0.15, layer_top_0 - m*v_spacing, 0.12, 0, lw =0.05, head_width=0.01, head_length=0.02)
# Nodes
for n, layer_size in enumerate(layer_sizes):
layer_top = v_spacing*(layer_size - 1)/2. (top bottom)/2.
for m in range(layer_size):
circle = plt.Circle((n*h_spacing left, layer_top - m*v_spacing), v_spacing/8.,
color='w', ec='k', zorder=4)
if n == 0:
plt.text(left-0.125, layer_top - m*v_spacing, r'$X_{' str(m 1) '}
Значения coefs_ являются
array([matrix([[-0.94539221, 4.71558222, 1.18114055, -0.0247317 , 0.65897569,
-4.56814996, -3.35490889, 0.1859133 , 0.07424753, 6.90725199],
[-2.48287521, 3.14839658, 0.44249679, -0.32001095, -1.14217304,
-1.9226931 , -2.4374025 , 2.35347059, -0.54031149, 3.9080797 ],
[ 0.15713579, -0.10550088, 1.88657889, 1.69982016, -0.57003659,
0.23898249, 0.53788204, 0.58590049, 3.56283575, -1.52514785],
[ 2.78640583, 2.69520817, 2.91659772, 0.83917307, 2.63572781,
2.38591315, 1.16198163, 1.24653089, 1.43679067, 0.52219298],
[ 0.56640031, 1.56162596, 3.53929899, -4.92257699, 3.10732374,
-1.71019921, -1.45060365, -1.9656212 , -2.54415882, 0.57261768],
[-1.32074064, 0.94831387, 0.47141262, -3.64962347, 3.39212857,
0.77377745, 1.04295819, 7.11011713, 1.18975941, 1.59917691],
[ 0.977984 , 1.07923358, -2.81972891, 4.65242696, -3.10353591,
-0.68438475, -1.39959398, -1.22330595, 0.45223289, 0.65884348]]),
matrix([[-0.49489946, 0.17994493, -0.03041135, -1.2021098 , 2.00356709,
2.19315657, -2.39778753],
[ 0.00898019, -0.01341118, -1.42407278, -0.98645785, -1.23737296,
-1.31009782, 0.32579397],
[ 1.01009537, -0.08545276, 0.28988038, 3.46345191, -0.09588307,
0.90830877, -2.08828012],
[-4.97097194, 0.01332595, 0.58301252, 2.10843412, 0.37481177,
-1.83738501, 2.92358809],
[ 3.93275315, -0.02436187, 0.51174384, -2.15054043, -0.9096572 ,
-3.14182279, 2.7819789 ],
[ 0.04236115, 0.83878036, 0.38800743, 1.83881625, 0.95167318,
0.46700375, 1.17837088],
[ 0.86639556, 1.11735707, 0.76364426, 1.05078341, 0.7146457 ,
1.16666294, 0.75577211],
[ 2.31029687, 5.89363035, -6.65521314, 0.60303478, -0.87160711,
-1.47199575, -2.88012028],
[-0.12512919, 2.20846339, 6.21649468, -3.41157653, -1.29878851,
0.06757862, -2.03271134],
[ 0.59767784, -0.00900227, -1.79903724, -1.84302839, -1.68108604,
-1.36057165, -0.46816008]])], dtype=object)
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
normed_coef = np.array([(c / np.max(np.abs(c)) 1) /2 for c in coefs_])
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
import matplotlib
cmap = matplotlib.cm.get_cmap('RdBu_r')
c=cmap(normed_coef[n][m, o])
Собираем все вместе:
## Gist originally developed by @craffel and improved by @ljhuang2017
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
cmap = matplotlib.cm.get_cmap('RdBu_r')
coefs_ = np.array([np.matrix([[-0.94539221, 4.71558222, 1.18114055, -0.0247317 , 0.65897569,
-4.56814996, -3.35490889, 0.1859133 , 0.07424753, 6.90725199],
[-2.48287521, 3.14839658, 0.44249679, -0.32001095, -1.14217304,
-1.9226931 , -2.4374025 , 2.35347059, -0.54031149, 3.9080797 ],
[ 0.15713579, -0.10550088, 1.88657889, 1.69982016, -0.57003659,
0.23898249, 0.53788204, 0.58590049, 3.56283575, -1.52514785],
[ 2.78640583, 2.69520817, 2.91659772, 0.83917307, 2.63572781,
2.38591315, 1.16198163, 1.24653089, 1.43679067, 0.52219298],
[ 0.56640031, 1.56162596, 3.53929899, -4.92257699, 3.10732374,
-1.71019921, -1.45060365, -1.9656212 , -2.54415882, 0.57261768],
[-1.32074064, 0.94831387, 0.47141262, -3.64962347, 3.39212857,
0.77377745, 1.04295819, 7.11011713, 1.18975941, 1.59917691],
[ 0.977984 , 1.07923358, -2.81972891, 4.65242696, -3.10353591,
-0.68438475, -1.39959398, -1.22330595, 0.45223289, 0.65884348]]),
np.matrix([[-0.49489946, 0.17994493, -0.03041135, -1.2021098 , 2.00356709,
2.19315657, -2.39778753],
[ 0.00898019, -0.01341118, -1.42407278, -0.98645785, -1.23737296,
-1.31009782, 0.32579397],
[ 1.01009537, -0.08545276, 0.28988038, 3.46345191, -0.09588307,
0.90830877, -2.08828012],
[-4.97097194, 0.01332595, 0.58301252, 2.10843412, 0.37481177,
-1.83738501, 2.92358809],
[ 3.93275315, -0.02436187, 0.51174384, -2.15054043, -0.9096572 ,
-3.14182279, 2.7819789 ],
[ 0.04236115, 0.83878036, 0.38800743, 1.83881625, 0.95167318,
0.46700375, 1.17837088],
[ 0.86639556, 1.11735707, 0.76364426, 1.05078341, 0.7146457 ,
1.16666294, 0.75577211],
[ 2.31029687, 5.89363035, -6.65521314, 0.60303478, -0.87160711,
-1.47199575, -2.88012028],
[-0.12512919, 2.20846339, 6.21649468, -3.41157653, -1.29878851,
0.06757862, -2.03271134],
[ 0.59767784, -0.00900227, -1.79903724, -1.84302839, -1.68108604,
-1.36057165, -0.46816008]])], dtype=object)
def draw_neural_net(ax, left, right, bottom, top, layer_sizes, coefs_):
'''
Draw a neural network cartoon using matplotilb.
:usage:
>>> fig = plt.figure(figsize=(12, 12))
>>> draw_neural_net(fig.gca(), .1, .9, .1, .9, [4, 7, 2])
:parameters:
- ax : matplotlib.axes.AxesSubplot
The axes on which to plot the cartoon (get e.g. by plt.gca())
- left : float
The center of the leftmost node(s) will be placed here
- right : float
The center of the rightmost node(s) will be placed here
- bottom : float
The center of the bottommost node(s) will be placed here
- top : float
The center of the topmost node(s) will be placed here
- layer_sizes : list of int
List of layer sizes, including input and output dimensionality
'''
n_layers = len(layer_sizes)
v_spacing = (top - bottom)/float(max(layer_sizes))
h_spacing = (right - left)/float(len(layer_sizes) - 1)
normed_coef = np.array([(c / np.max(np.abs(c)) 1) /2 for c in coefs_])
# Input-Arrows
layer_top_0 = v_spacing*(layer_sizes[0] - 1)/2. (top bottom)/2.
for m in range(layer_sizes[0]):
plt.arrow(left-0.15, layer_top_0 - m*v_spacing, 0.12, 0, lw =0.05, head_width=0.01, head_length=0.02)
# Nodes
for n, layer_size in enumerate(layer_sizes):
layer_top = v_spacing*(layer_size - 1)/2. (top bottom)/2.
for m in range(layer_size):
circle = plt.Circle((n*h_spacing left, layer_top - m*v_spacing), v_spacing/8.,
color='w', ec='k', zorder=4)
if n == 0:
plt.text(left-0.125, layer_top - m*v_spacing, r'$X_{' str(m 1) '}
, fontsize=15)
elif (n_layers == 3) amp; (n == 1):
plt.text(n*h_spacing left 0.00, layer_top - m*v_spacing (v_spacing/8. 0.01*v_spacing), r'$H_{' str(m 1) '}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
elif n == n_layers -1:
plt.text(n*h_spacing left 0.10, layer_top - m*v_spacing, r'$y_{' str(m 1) '}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
ax.add_artist(circle)
# Edges between nodes
for n, (layer_size_a, layer_size_b) in enumerate(zip(layer_sizes[:-1], layer_sizes[1:])):
layer_top_a = v_spacing*(layer_size_a - 1)/2. (top bottom)/2.
layer_top_b = v_spacing*(layer_size_b - 1)/2. (top bottom)/2.
for m in range(layer_size_a):
for o in range(layer_size_b):
line = plt.Line2D([n*h_spacing left, (n 1)*h_spacing left],
[layer_top_a - m*v_spacing, layer_top_b - o*v_spacing], c='k')
ax.add_artist(line)
xm = (n*h_spacing left)
xo = ((n 1)*h_spacing left)
ym = (layer_top_a - m*v_spacing)
yo = (layer_top_b - o*v_spacing)
rot_mo_rad = np.arctan((yo-ym)/(xo-xm))
rot_mo_deg = rot_mo_rad*180./np.pi
xm1 = xm (v_spacing/8. 0.05)*np.cos(rot_mo_rad)
if n == 0:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.05)*np.sin(rot_mo_rad)
else:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.04)*np.sin(rot_mo_rad)
plt.text( xm1, ym1,
str(round(coefs_[n][m, o],4)),
rotation = rot_mo_deg,
fontsize = 10)
# Output-Arrows
layer_top_0 = v_spacing*(layer_sizes[-1] - 1)/2. (top bottom)/2.
for m in range(layer_sizes[-1]):
plt.arrow(right 0.011, layer_top_0 - m*v_spacing, 0.16*h_spacing, 0, lw =0.05, head_width=0.01, head_length=0.02)
fig = plt.figure(figsize=(18, 18))
ax = fig.gca()
ax.axis('off')
# layer_sizes = [7] [10] [7]
layer_sizes = nodes
draw_neural_net(ax, .1, .9, .1, .9, layer_sizes, coefs_)
fig.savefig('nn_digaram.png')
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
elif (n_layers == 3) amp; (n == 1):
plt.text(n*h_spacing left 0.00, layer_top - m*v_spacing (v_spacing/8. 0.01*v_spacing), r'$H_{' str(m 1) '}
, fontsize=15)
elif (n_layers == 3) amp; (n == 1):
plt.text(n*h_spacing left 0.00, layer_top - m*v_spacing (v_spacing/8. 0.01*v_spacing), r'$H_{' str(m 1) '}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
elif n == n_layers -1:
plt.text(n*h_spacing left 0.10, layer_top - m*v_spacing, r'$y_{' str(m 1) '}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
ax.add_artist(circle)
# Edges between nodes
for n, (layer_size_a, layer_size_b) in enumerate(zip(layer_sizes[:-1], layer_sizes[1:])):
layer_top_a = v_spacing*(layer_size_a - 1)/2. (top bottom)/2.
layer_top_b = v_spacing*(layer_size_b - 1)/2. (top bottom)/2.
for m in range(layer_size_a):
for o in range(layer_size_b):
line = plt.Line2D([n*h_spacing left, (n 1)*h_spacing left],
[layer_top_a - m*v_spacing, layer_top_b - o*v_spacing], c='k')
ax.add_artist(line)
xm = (n*h_spacing left)
xo = ((n 1)*h_spacing left)
ym = (layer_top_a - m*v_spacing)
yo = (layer_top_b - o*v_spacing)
rot_mo_rad = np.arctan((yo-ym)/(xo-xm))
rot_mo_deg = rot_mo_rad*180./np.pi
xm1 = xm (v_spacing/8. 0.05)*np.cos(rot_mo_rad)
if n == 0:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.05)*np.sin(rot_mo_rad)
else:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.04)*np.sin(rot_mo_rad)
plt.text( xm1, ym1,
str(round(coefs_[n][m, o],4)),
rotation = rot_mo_deg,
fontsize = 10)
# Output-Arrows
layer_top_0 = v_spacing*(layer_sizes[-1] - 1)/2. (top bottom)/2.
for m in range(layer_sizes[-1]):
plt.arrow(right 0.011, layer_top_0 - m*v_spacing, 0.16*h_spacing, 0, lw =0.05, head_width=0.01, head_length=0.02)
fig = plt.figure(figsize=(18, 18))
ax = fig.gca()
ax.axis('off')
# layer_sizes = [7] [10] [7]
layer_sizes = nodes
draw_neural_net(ax, .1, .9, .1, .9, layer_sizes, coefs_)
fig.savefig('nn_digaram.png')
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
elif n == n_layers —1:
plt.text(n*h_spacing left 0.10, layer_top — m*v_spacing, r’$y_{‘ str(m 1) ‘}
, fontsize=15)
elif (n_layers == 3) amp; (n == 1):
plt.text(n*h_spacing left 0.00, layer_top — m*v_spacing (v_spacing/8. 0.01*v_spacing), r’$H_{‘ str(m 1) ‘}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
elif n == n_layers —1:
plt.text(n*h_spacing left 0.10, layer_top — m*v_spacing, r’$y_{‘ str(m 1) ‘}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
ax.add_artist(circle)
# Edges between nodes
for n, (layer_size_a, layer_size_b) in enumerate(zip(layer_sizes[:-1], layer_sizes[1:])):
layer_top_a = v_spacing*(layer_size_a — 1)/2. (top bottom)/2.
layer_top_b = v_spacing*(layer_size_b — 1)/2. (top bottom)/2.
for m in range(layer_size_a):
for o in range(layer_size_b):
line = plt.Line2D([n*h_spacing left, (n 1)*h_spacing left],
[layer_top_a — m*v_spacing, layer_top_b — o*v_spacing], c=‘k’)
ax.add_artist(line)
xm = (n*h_spacing left)
xo = ((n 1)*h_spacing left)
ym = (layer_top_a — m*v_spacing)
yo = (layer_top_b — o*v_spacing)
rot_mo_rad = np.arctan((yo-ym)/(xo-xm))
rot_mo_deg = rot_mo_rad*180./np.pi
xm1 = xm (v_spacing/8. 0.05)*np.cos(rot_mo_rad)
if n == 0:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.05)*np.sin(rot_mo_rad)
else:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.04)*np.sin(rot_mo_rad)
plt.text( xm1, ym1,
str(round(coefs_[n][m, o],4)),
rotation = rot_mo_deg,
fontsize = 10)
# Output-Arrows
layer_top_0 = v_spacing*(layer_sizes[-1] — 1)/2. (top bottom)/2.
for m in range(layer_sizes[-1]):
plt.arrow(right 0.011, layer_top_0 — m*v_spacing, 0.16*h_spacing, 0, lw =0.05, head_width=0.01, head_length=0.02)
fig = plt.figure(figsize=(18, 18))
ax = fig.gca()
ax.axis(‘off’)
# layer_sizes = [7] [10] [7]
layer_sizes = nodes
draw_neural_net(ax, .1, .9, .1, .9, layer_sizes, coefs_)
fig.savefig(‘nn_digaram.png’)
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
ax.add_artist(circle)
# Edges between nodes
for n, (layer_size_a, layer_size_b) in enumerate(zip(layer_sizes[:-1], layer_sizes[1:])):
layer_top_a = v_spacing*(layer_size_a — 1)/2. (top bottom)/2.
layer_top_b = v_spacing*(layer_size_b — 1)/2. (top bottom)/2.
for m in range(layer_size_a):
for o in range(layer_size_b):
line = plt.Line2D([n*h_spacing left, (n 1)*h_spacing left],
[layer_top_a — m*v_spacing, layer_top_b — o*v_spacing], c=cmap(normed_coef[n][m, o]))
ax.add_artist(line)
xm = (n*h_spacing left)
xo = ((n 1)*h_spacing left)
ym = (layer_top_a — m*v_spacing)
yo = (layer_top_b — o*v_spacing)
rot_mo_rad = np.arctan((yo-ym)/(xo-xm))
rot_mo_deg = rot_mo_rad*180./np.pi
xm1 = xm (v_spacing/8. 0.05)*np.cos(rot_mo_rad)
if n == 0:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.05)*np.sin(rot_mo_rad)
else:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.04)*np.sin(rot_mo_rad)
plt.text( xm1, ym1,
str(round(coefs_[n][m, o],4)),
rotation = rot_mo_deg,
fontsize = 10)
# Output-Arrows
layer_top_0 = v_spacing*(layer_sizes[-1] — 1)/2. (top bottom)/2.
for m in range(layer_sizes[-1]):
plt.arrow(right 0.011, layer_top_0 — m*v_spacing, 0.16*h_spacing, 0, lw =0.05, head_width=0.01, head_length=0.02)
fig = plt.figure(figsize=(18, 18))
ax = fig.gca()
ax.axis(‘off’)
layer_sizes = [7] [10] [7]
# layer_sizes = nodes
draw_neural_net(ax, .1, .9, .1, .9, layer_sizes, coefs_)
# fig.savefig(‘nn_digaram.png’)
, fontsize=15)
elif (n_layers == 3) amp; (n == 1):
plt.text(n*h_spacing left 0.00, layer_top — m*v_spacing (v_spacing/8. 0.01*v_spacing), r’$H_{‘ str(m 1) ‘}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
elif n == n_layers —1:
plt.text(n*h_spacing left 0.10, layer_top — m*v_spacing, r’$y_{‘ str(m 1) ‘}
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.
Ответ №1:
Ответ зависит от того, как вы хотите нормализовать свои веса. Например, если вы хотите, чтобы каждый уровень сети был нормализован, вы можете сделать что-то вроде этого:
Таким образом, вы можете использовать цветовую карту matplotlib следующим образом:
Собираем все вместе:
, fontsize=15)
ax.add_artist(circle)
# Edges between nodes
for n, (layer_size_a, layer_size_b) in enumerate(zip(layer_sizes[:-1], layer_sizes[1:])):
layer_top_a = v_spacing*(layer_size_a — 1)/2. (top bottom)/2.
layer_top_b = v_spacing*(layer_size_b — 1)/2. (top bottom)/2.
for m in range(layer_size_a):
for o in range(layer_size_b):
line = plt.Line2D([n*h_spacing left, (n 1)*h_spacing left],
[layer_top_a — m*v_spacing, layer_top_b — o*v_spacing], c=‘k’)
ax.add_artist(line)
xm = (n*h_spacing left)
xo = ((n 1)*h_spacing left)
ym = (layer_top_a — m*v_spacing)
yo = (layer_top_b — o*v_spacing)
rot_mo_rad = np.arctan((yo-ym)/(xo-xm))
rot_mo_deg = rot_mo_rad*180./np.pi
xm1 = xm (v_spacing/8. 0.05)*np.cos(rot_mo_rad)
if n == 0:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.05)*np.sin(rot_mo_rad)
else:
if yo > ym:
ym1 = ym (v_spacing/8. 0.12)*np.sin(rot_mo_rad)
else:
ym1 = ym (v_spacing/8. 0.04)*np.sin(rot_mo_rad)
plt.text( xm1, ym1,
str(round(coefs_[n][m, o],4)),
rotation = rot_mo_deg,
fontsize = 10)
# Output-Arrows
layer_top_0 = v_spacing*(layer_sizes[-1] — 1)/2. (top bottom)/2.
for m in range(layer_sizes[-1]):
plt.arrow(right 0.011, layer_top_0 — m*v_spacing, 0.16*h_spacing, 0, lw =0.05, head_width=0.01, head_length=0.02)
fig = plt.figure(figsize=(18, 18))
ax = fig.gca()
ax.axis(‘off’)
# layer_sizes = [7] [10] [7]
layer_sizes = nodes
draw_neural_net(ax, .1, .9, .1, .9, layer_sizes, coefs_)
fig.savefig(‘nn_digaram.png’)
Значения coefs_ являются
Комментарии:
1. Можете ли вы поделиться образцом коэффициентов
coefs_ = w
, чтобы мы могли запустить код для теста?2. @Andrea Большое спасибо за ваш ответ. Я отредактировал исходный вопрос и добавил значения для coefs_ . Надеюсь, этот формат подойдет.