我有一些函数z(x,y),我想生成一个颤动图(梯度的2D图)。像这样:
为此,我必须在线性网格上运行渐变并将数据调整为matplotlib.quiver的格式。
一种幼稚的方法是在一个循环中向前和向后迭代:
for i in range(10):
for j in range(10):
x = torch.tensor(1. * i, requires_grad=True)
y = torch.tensor(1. * j, requires_grad=True)
z = x ** 2 + y ** 2
z.backward()
print(x.grad, y.grad)
这显然是效率很低的。有一些关于如何从x,y生成线性网格的示例,但我稍后需要将网格更改回正向公式的格式,获取梯度向量并将其放回,等等。
在numpy中一个简单的例子是:
import matplotlib.pyplot as plt
n = 25
x_range = np.linspace(-25, 25, n)
y_range = np.linspace(-25, 25, n)
X, Y = np.meshgrid(x_range, y_range)
Z = X**2 + Y**2
U, V = 2*X, 2*Y
plt.quiver(X, Y, U, V, Z, alpha=.9)
使用pytorch的标准方法是什么?有一些简单的例子吗?