2024-09-28 21:26:25 发布
网友
我试图想象二维数据在通过神经网络的各个层时是如何被转换和“弯曲”的。仿射变换和转换很容易,但可视化一个激活函数(如tanh或logistic函数)如何将2D空间弯曲成曲线网格是一个更大的挑战。在
为了理解我的意思,克里斯·奥拉在他的帖子中确实做到了这一点。在
你们知道怎么做吗?在
最后我得出了以下解决方案:
首先,我使用NumPylinspace函数指定了一个常规的2D网格:
linspace
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)
然后,我在网格上执行任意的仿射变换。(这模拟了神经网络中激活和权重之间的向量矩阵乘法。)
最后但并非最不重要的是,使用构成网格中每条线的(现在已转换)坐标,我应用了一个非线性函数(在本例中为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()
结果是:
最后我得出了以下解决方案:
首先,我使用NumPy
linspace
函数指定了一个常规的2D网格:然后,我在网格上执行任意的仿射变换。(这模拟了神经网络中激活和权重之间的向量矩阵乘法。)
^{pr2}$最后但并非最不重要的是,使用构成网格中每条线的(现在已转换)坐标,我应用了一个非线性函数(在本例中为logistic函数):
使用matplotlib绘制新线:
结果是:
相关问题 更多 >
编程相关推荐