利于seo的网站设计,商城网站源码dede,互联网十大创业项目,自己的网站怎么优化x torch.tensor([1.0,0.],[-1.,1.],requires_gradTrue)
z x.pow(2).sum()
z.backward()
x.grad在这段代码中#xff0c;我们利用 PyTorch 进行自动求梯度#xff0c;下面详细解释代码的每一个部分及其在反向传播中的作用。同时#xff0c;我们也将介绍函数对象和叶子节点的…x torch.tensor([1.0,0.],[-1.,1.],requires_gradTrue)
z x.pow(2).sum()
z.backward()
x.grad在这段代码中我们利用 PyTorch 进行自动求梯度下面详细解释代码的每一个部分及其在反向传播中的作用。同时我们也将介绍函数对象和叶子节点的概念。 创建张量 x torch.tensor([[1.0, 0.], [-1., 1.]], requires_gradTrue)这里我们创建了一个二维张量 x其内容是 [[1.0, 0.], [-1., 1.]]。设置 requires_gradTrue意味着我们希望跟踪这个张量的操作以便进行自动求梯度。PyTorch 记录所有对该张量的操作以便在反向传播时能够计算出梯度。此外 x 是一个叶子节点这是指在计算图的最底层的张量它是用户直接创建的张量或从其他张量分割而来不是通过其他张量的操作结果产生的。 定义计算图的输出 z x.pow(2).sum()x.pow(2) 是对 x 中的每个元素进行平方运算生成一个新的张量这个新张量并不是用户直接创建的而是通过操作 x 生成因此它不是叶子节点。接着我们调用 .sum()它会计算所有元素的和结果保存在 z 中。至此计算图已经构建完成PyTorch 知道如何从 z 计算回 x。 反向传播 z.backward()这一行触发了反向传播过程计算出 z 相对于 x 的梯度。PyTorch 通过链式法则自动计算每个节点的梯度其中涉及的操作和节点形成的计算图使得这些计算变得直接。具体来说由于 ( z x 1 2 x 2 2 x 3 2 x 4 2 z x_1^2 x_2^2 x_3^2 x_4^2 zx12x22x32x42 )对每个元素分别求导可得 对于 ( x 1 1.0 x_1 1.0 x11.0 )( ∂ z ∂ x 1 2 ⋅ x 1 2 ⋅ 1.0 2 \frac{\partial z}{\partial x_1} 2 \cdot x_1 2 \cdot 1.0 2 ∂x1∂z2⋅x12⋅1.02 )对于 ( x 2 0.0 x_2 0.0 x20.0 )( ∂ z ∂ x 2 2 ⋅ x 2 2 ⋅ 0.0 0 \frac{\partial z}{\partial x_2} 2 \cdot x_2 2 \cdot 0.0 0 ∂x2∂z2⋅x22⋅0.00 \对于 ( x 3 − 1.0 x_3 -1.0 x3−1.0 )( ∂ z ∂ x 3 2 ⋅ x 3 2 ⋅ − 1.0 − 2 \frac{\partial z}{\partial x_3} 2 \cdot x_3 2 \cdot -1.0 -2 ∂x3∂z2⋅x32⋅−1.0−2 )对于 ( x 4 1.0 x_4 1.0 x41.0 )( ∂ z ∂ x 4 2 ⋅ x 4 2 ⋅ 1.0 2 \frac{\partial z}{\partial x_4} 2 \cdot x_4 2 \cdot 1.0 2 ∂x4∂z2⋅x42⋅1.02 ) 查看梯度 x.grad这一行返回 x 的梯度结果应为tensor([[ 2., 0.], [-2., 2.]])。这对应于从反向传播过程中计算得到的梯度值。
在 PyTorch 中任何通过运算生成的张量都可以看作是一个函数对象它们代表了多个操作和计算结果的链表。例如z 就是一个非叶子节点它由 x 计算得到而这些操作形成了一个计算图这样在计算梯度时我们就知道如何回溯。