我有一些函数z(x,y),我想生成一个震动图(梯度的二维图)。像这样的:
为了做到这一点,我必须在线性网格上运行渐变,并将数据调整为matplotlib.quiver所做的格式。
一种简单的方法是在循环中向前和向后迭代:
范围(10)中的i的
对于范围(10)内的J:
x=焊炬张量(1.*i,要求“grad=true”)。
Y=焊炬张量(1.*j,需要_Grad=true)
Z=X**2+Y**2
后退()
打印(x.grad,y.grad)
< /代码>
这显然是非常低效的。有一些关于如何从x,y生成一个线性网格的例子,但是我以后需要把网格改回正向公式的格式,得到梯度向量,然后把它们放回去,等等。
numpy中的一个简单例子是:
导入matplotlib.pyplot as plt
n=25
x_范围=np.linspace(-25,25,n)
y_范围=np.linspace(-25,25,n)
x,y=np.网格(x_范围,y_范围)
Z= x** 2 +y** 2
u,v=2×x,2*y
PLT.震动(x,y,u,v,z,alpha=.9)
< /代码>
使用pytorch的标准方法是什么?有一些简单的例子吗?
为了做到这一点,我必须在线性网格上运行渐变,并将数据调整为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的标准方法是什么?有一些简单的例子吗?