Pytorch эквивалент tf.Variable - PullRequest
       0

Pytorch эквивалент tf.Variable

0 голосов
/ 18 января 2020

Я пытаюсь реализовать этот код в 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,001 от начального значения 0,1 (до нуля потому что я обрезаю данные после вызова loss.backward ()).

1 Ответ

0 голосов
/ 21 января 2020

В PyTorch переменная и тензор были объединены, поэтому вы правы, что скалярная переменная должна быть просто скалярным тензором.

В изоляции:

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

0.001 является общая скорость обучения, поэтому я подозреваю, что это связано со скоростью, с которой обновляется ваша обучаемая переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...