如何在matplotlib中绘制曲线图

2024-09-28 21:26:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图想象二维数据在通过神经网络的各个层时是如何被转换和“弯曲”的。仿射变换和转换很容易,但可视化一个激活函数(如tanh或logistic函数)如何将2D空间弯曲成曲线网格是一个更大的挑战。在

为了理解我的意思,克里斯·奥拉在他的帖子中确实做到了这一点。在

enter image description here

你们知道怎么做吗?在


Tags: 数据函数可视化空间神经网络帖子想象logistic
1条回答
网友
1楼 · 发布于 2024-09-28 21:26:25

最后我得出了以下解决方案:

首先,我使用NumPylinspace函数指定了一个常规的2D网格:

x_range = range(-5,6)
y_range = range(-5,6)

lines = np.empty((len(x_range)+len(y_range), 2, 100))

for i in x_range: # vertical lines
    linspace_x = np.linspace(x_range[i], x_range[i], 100)
    linspace_y = np.linspace(min(y_range), max(y_range), 100)
    lines[i] = (linspace_x, linspace_y)
for i in y_range: # horizontal lines
    linspace_x = np.linspace(min(x_range), max(x_range), 100)
    linspace_y = np.linspace(y_range[i], y_range[i], 100)
    lines[i+len(x_range)] = (linspace_x, linspace_y)

然后,我在网格上执行任意的仿射变换。(这模拟了神经网络中激活和权重之间的向量矩阵乘法。)

^{pr2}$

最后但并非最不重要的是,使用构成网格中每条线的(现在已转换)坐标,我应用了一个非线性函数(在本例中为logistic函数):

def sigmoid(z):
    return 1.0/(1.0+np.exp(-z))

bent_lines = sigmoid(transformed_lines)

使用matplotlib绘制新线:

plt.figure(figsize=(8,8))
plt.axis("off")
for line in bent_lines:
    plt.plot(line[0], line[1], linewidth=0.5, color="k")
plt.show()

结果是:

enter image description here

相关问题 更多 >