Поиск параметров с обратным распространением и градиентным спуском в PyTorch - PullRequest
0 голосов
/ 14 января 2020

Я экспериментирую с PyTorch и автодифференцированием и градиентным спуском

С этой целью я хотел бы оценить параметры, которые привели бы к определенному значению произвольной линейной в функции параметров.

Мой код здесь:

import torch

X = X.astype(float)

X = np.array([[3.], [4.], [5.]])

X = torch.from_numpy(X)

X.requires_grad = True

W = np.random.randn(3,3)

W = np.triu(W, k=0)

W = torch.from_numpy(W)

W.requires_grad = True

out = 10 - (X@torch.transpose(X, 1,0) * W).sum()

out:

enter image description here

Моя цель - сделать out близким к 0 (в пределах интервала [-.00001 , 0.0001]), отрегулировав W с использованием градиента W.

Как мне поступить отсюда, чтобы добиться этого с помощью pytorch?

Обновить

@ Umang: это то, что я получаю, когда запускаю предлагаемый вами код:

enter image description here

Фактически алгоритм расходится.

1 Ответ

1 голос
/ 14 января 2020
# your code as it is
import torch
import numpy as np 

X = np.array([[3.], [4.], [5.]])
X = torch.from_numpy(X)
X.requires_grad = True
W = np.random.randn(3,3)
W = np.triu(W, k=0)
W = torch.from_numpy(W)
W.requires_grad = True

# define parameters for gradient descent
max_iter=100
lr_rate = 1e-3

# we will do gradient descent for max_iter iteration, or convergence till the criteria is met.
i=0
out = compute_out(X,W)
while (i<max_iter) and (torch.abs(out)>0.01):
    loss = (out-0)**2
    W = W - lr_rate*torch.autograd.grad(loss, W)[0]
    i+=1
    print(f"{i}: {out}")
    out = compute_out(X,W)

print(W)

Мы определяем функцию потерь таким образом, чтобы ее минимумы находились в нужной точке, и запускали градиентный спуск. Здесь я использовал квадратичную ошибку, но вы также можете использовать другие функции потерь с желаемыми минимумами.

...