def plot_pearson(name):
"""Plot the pearsin coeff of the neurons for each layer"""
data_array = utils.get_data(name)
ws = data_array['weights']
f = plt.figure(figsize=(12, 8))
axes = f.add_subplot(111)
#The number of neurons in each layer -
#TODO need to change it to be auto
sizes =[10,7, 5, 4,3,2 ]
#The mean of pearson coeffs of all the layers
pearson_mean =[]
#Go over all the layers
for layer in range(len(sizes)):
inner_pearson_mean =[]
#Go over all the weights in the layer
for k in range(len(ws)):
ws_current = np.squeeze(ws[k][0][0][-1])
#Go over the neurons
for neuron in range(len(ws_current[layer])):
person_t = []
#Go over the rest of the neurons
for neuron_second in range(neuron+1, len(ws_current[layer])):
pearson_c, p_val =sis.pearsonr(ws_current[layer][neuron], ws_current[layer][neuron_second])
person_t.append(pearson_c)
inner_pearson_mean.append(np.mean(person_t))
pearson_mean.append(np.mean(inner_pearson_mean))
#Plot the coeff
axes.bar(np.arange(1,7), np.abs(np.array(pearson_mean))*np.sqrt(sizes), align='center')
axes.set_xlabel('Layer')
axes.set_ylabel('Abs(Pearson)*sqrt(N_i)')
rects = axes.patches
# Now make some labels
labels = ["L%d (%d nuerons)" % (i, j) for i, j in zip(range(len(rects)), sizes)]
plt.xticks(np.arange(1,7), labels)
评论列表
文章目录