首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matplotlib中绘制曲线图

如何在matplotlib中绘制曲线图
EN

Stack Overflow用户
提问于 2017-02-03 18:02:17
回答 1查看 990关注 0票数 4

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

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

你们有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 03:03:12

我最终得到了以下解决方案:

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
def affine(z):
    z[:, 0] = z[:, 0] + z[:,1] * 0.3 # transforming the x coordinates
    z[:, 1] = 0.5 * z[:, 1] - z[:, 0] * 0.8 # transforming the y coordinates
    return z

transformed_lines = affine(lines)

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

代码语言:javascript
复制
def sigmoid(z):
    return 1.0/(1.0+np.exp(-z))

bent_lines = sigmoid(transformed_lines)

使用matplotlib绘制新线:

代码语言:javascript
复制
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()

结果是:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42021578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档