Я обучил NN с векторным вводом и скалярным выходом (регрессией). Теперь я хочу найти глобальный minimun NN, используя GD с pytorch.
Я новичок в программировании вообще, python специально, и pytorch еще более определенно.
Я считаю, что то, что я пытаюсь сделать, должно было быть сделано тысячу раз раньше, если не десять тысяч раз. Я был бы очень счастлив и благодарен, если бы кто-нибудь мог указать мне какой-нибудь код где-нибудь (может быть, в github), где theres пример того, что я пытаюсь сделать, чтобы я мог приспособиться к моим потребностям.
Вы делаете то, что вы сделали для обучения своей сети, но вместо обновления весов вы обновляете ввод:
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
input=100*softmax(input)
?