Найти глобальный минимум с GD в PyTorch - PullRequest
0 голосов
/ 26 августа 2018

Я обучил NN с векторным входом и скалярным выходом (регрессия). Теперь я хочу найти глобальный минимум NN, используя GD с pytorch.

Я новичок в программировании в целом, в частности в Python, и в Pytorch еще более конкретно.

Я полагаю, что то, что я пытаюсь сделать, должно быть сделано тысячу раз раньше, если не десять тысяч раз. Я был бы очень счастлив и благодарен, если бы кто-нибудь мог указать мне какой-нибудь код (возможно, на github), где есть пример того, что я пытаюсь сделать, и который я могу приспособить к своим потребностям.

1 Ответ

0 голосов
/ 26 августа 2018

Вы делаете то же, что и для обучения своей сети, но вместо обновления весов вы обновляете ввод:

input = torch.zeros([1,3,32,32], requires_grad=True) # Whatever the expected input size of your network is
output = model(input)
target = 0.0 # What kind of target should your network reach?
loss = ((target - output) ** 2) # Replace this with the loss you are using
grad = torch.autograd.grad(loss, input)

Вы можете применить градиент (возможно, умноженный на скорость обучения) к входу и повторить этот шаг много раз. Я обновил это с https://discuss.pytorch.org/t/gradient-of-loss-of-neural-network-with-respect-to-input/9482

Вам следует обратить внимание на тот факт, что ваша сеть может выдавать довольно шумные «входы», поэтому вам следует подумать о том, каким должен быть ваш первоначальный вклад. Google уже делал нечто подобное, см. Например https://www.networkworld.com/article/2974718/software/deep-dream-artificial-intelligence-meets-hallucinations.html

...