Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 在Pytorch中,quantity.backward()计算quantity wrt的梯度哪个参数?_Parameters_Neural Network_Pytorch_Gradient Descent - Fatal编程技术网

Parameters 在Pytorch中,quantity.backward()计算quantity wrt的梯度哪个参数?

Parameters 在Pytorch中,quantity.backward()计算quantity wrt的梯度哪个参数?,parameters,neural-network,pytorch,gradient-descent,Parameters,Neural Network,Pytorch,Gradient Descent,反向方法计算梯度wrt到哪些参数?所有参数都要求_grad具有真值 有趣的是,在Pytorch 计算梯度 及 加载基于渐变更新参数的优化器 需要关于感兴趣的参数标识的不同信息才能工作 第一个似乎知道计算梯度的参数。 第二个需要向其提及的参数。请参阅下面的代码 quantity.backward() optim = torch.SGD(model.parameters()) optim.step() 怎么样 为什么向后不需要model.parameters() 提到特定的参数子集不是更有效吗?

反向方法计算梯度wrt到哪些参数?所有参数都要求_grad具有真值

有趣的是,在Pytorch

  • 计算梯度
  • 加载基于渐变更新参数的优化器
  • 需要关于感兴趣的参数标识的不同信息才能工作

    第一个似乎知道计算梯度的参数。 第二个需要向其提及的参数。请参阅下面的代码

    quantity.backward() 
    optim = torch.SGD(model.parameters())
    optim.step()
    
    怎么样

    为什么向后不需要model.parameters()


    提到特定的参数子集不是更有效吗?

    计算
    数量
    需要构造一个2排序图,其中节点要么是张量,要么是张量上的可微运算(所谓的计算图)。在引擎盖下,pytorch为您跟踪此图表。调用
    quantity.backward()
    时,要求Pytork使用遇到的每个操作的导数而不是操作本身,对图形执行从输出到输入的反向遍历。标记为需要梯度的叶张量累加向后计算的梯度

    优化器是另一回事:它只是在一组参数上实现优化策略,因此它需要知道您希望它优化哪些参数。因此
    quantity.backward()
    计算梯度,
    optim.step()
    使用这些梯度执行优化步骤,更新
    模型中包含的参数

    至于效率,我没有看到任何支持在向后传递中指定参数的论据(其语义是什么?)。 如果您希望避免在后退模式下遍历部分图形,pytorch将自动为您执行此操作,前提是您记住:

    • 可以将叶张量标记为不需要梯度
    • 非叶张量——某些运算f(x1,…xN)的输出——需要梯度,如果x1…xN中至少有一个需要梯度
    • 不需要梯度块向后遍历的张量,确保没有不必要的计算

    计算
    数量
    需要构造一个2排序图,其中节点要么是张量,要么是张量上的可微运算(所谓的计算图)。在引擎盖下,pytorch为您跟踪此图表。调用
    quantity.backward()
    时,要求Pytork使用遇到的每个操作的导数而不是操作本身,对图形执行从输出到输入的反向遍历。标记为需要梯度的叶张量累加向后计算的梯度

    优化器是另一回事:它只是在一组参数上实现优化策略,因此它需要知道您希望它优化哪些参数。因此
    quantity.backward()
    计算梯度,
    optim.step()
    使用这些梯度执行优化步骤,更新
    模型中包含的参数

    至于效率,我没有看到任何支持在向后传递中指定参数的论据(其语义是什么?)。 如果您希望避免在后退模式下遍历部分图形,pytorch将自动为您执行此操作,前提是您记住:

    • 可以将叶张量标记为不需要梯度
    • 非叶张量——某些运算f(x1,…xN)的输出——需要梯度,如果x1…xN中至少有一个需要梯度
    • 不需要梯度块向后遍历的张量,确保没有不必要的计算

    如果
    数量
    是一个正确的标量,是否在每个叶节点上累积
    d数量/d叶
    (通过链式规则)?若数量是一个向量,它在每片叶子上累积了一行雅可比矩阵。这是正确的。在生成性对抗网络中,指定参数可以使backprop程序更有效。在这种情况下,我们有两个目标值(一个用于生成器,一个用于鉴别器)。一些模型参数需要每个目标值的梯度,但不是所有参数。我明白了。我对GANs的印象是,当您计算生成数据的鉴别器损失时,您可以(/应该?)首先
    detach()
    将它们从图形中分离出来,有效地阻止鉴别器损失更新生成器参数。不太熟悉GANs,所以对此持怀疑态度,认为如果
    数量
    是一个标量正确,它是否在每个叶节点上累积
    d数量/d叶
    (通过链式规则)?若数量是一个向量,它在每片叶子上累积了一行雅可比矩阵。这是正确的。在生成性对抗网络中,指定参数可以使backprop程序更有效。在这种情况下,我们有两个目标值(一个用于生成器,一个用于鉴别器)。一些模型参数需要每个目标值的梯度,但不是所有参数。我明白了。我对GANs的印象是,当您计算生成数据的鉴别器损失时,您可以(/应该?)首先
    detach()
    将它们从图形中分离出来,有效地阻止鉴别器损失更新生成器参数。我对甘斯并不太熟悉,所以还是对此持保留态度吧