【问题标题】:Pytorch equivalent of tf.VariablePytorch 相当于 tf.Variable
【发布时间】:2020-05-05 02:27:48
【问题描述】:

我正在尝试在 pytorch 中实现此代码:

self.scale_var = tf.Variable(
          0.1, name='scale_var',
          trainable=True,
          dtype=tf.float32,
          constraint=lambda x: tf.clip_by_value(x, 0, np.infty))

我想要一个可训练的标量值,并希望在损失函数中使用该值缩放一个常数。下面提到的代码合适吗?

class pytorch_variable(nn.Module):
    def __init__(self):
        super(pytorch_variable,self).__init__()
        self.var = nn.Parameter(torch.tensor(0.1))

    def forward(self):
        return self.var 

现在发生的情况是梯度流过它,但可训练的标量值慢慢减少到零,从初始值 0.1 减少了 0.001(直到零,因为我在 loss.backward() 调用后剪切了数据) .

【问题讨论】:

    标签: tensorflow pytorch


    【解决方案1】:

    在 PyTorch 中,Variable 和 Tensor 被合并了,所以你正确地认为标量变量应该只是一个标量张量。

    孤立地:

    >>> x=torch.tensor(5.5, requires_grad=True)
    >>> x.grad
    >>> x.backward(torch.tensor(12.4))
    >>> x.grad
    tensor(12.4000)
    

    0.001 是一个常见的学习率,所以我怀疑这与您的可训练变量的更新率有关。

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 2019-12-21
      • 2019-11-27
      • 2021-12-04
      • 2021-02-02
      • 2021-11-11
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多