Optimization 如何使用Pytork找到最大化神经网络输出的输入
我有一个pytorch网络,已经过培训,并更新了权重(完整培训) 在培训之后,我想最大限度地提高网络的输入输出。换句话说,我想优化输入,使神经网络输出最大化,而不改变权重。我怎样才能做到这一点。 我的审判,但没有意义:Optimization 如何使用Pytork找到最大化神经网络输出的输入,optimization,neural-network,pytorch,Optimization,Neural Network,Pytorch,我有一个pytorch网络,已经过培训,并更新了权重(完整培训) 在培训之后,我想最大限度地提高网络的输入输出。换句话说,我想优化输入,使神经网络输出最大化,而不改变权重。我怎样才能做到这一点。 我的审判,但没有意义: in = torch.autograd.Variable(x) out = Net(in) grad = torch.autograd.grad(out, input) 禁用网络的渐变 将输入张量设置为需要梯度的参数 初始化包装输入张量的优化器
in = torch.autograd.Variable(x)
out = Net(in)
grad = torch.autograd.grad(out, input)
但要确保你的目标张量是明确的wrt。网络的单调性,否则你可能会得到NAN。为什么要使用MSELoss,损失不应该是
-f(x)
?因为你想最大化f(x)?最小化y(你的目标)和f(x)之间的距离更一般——只是y到你的目标应该超出的范围,但我认为这里没有任何固定的目标,目标是最大化输出,使其尽可能大。那么你的y
是什么?我认为可以将损失本身作为-f(x)
来捕获预期目标。一个包含任意高值的向量,理想情况下设置为网络编码域的上边界(如果有)。好吧,这看起来有点复杂,但我认为对同一件事进行了优化。
in = torch.autograd.Variable(x)
out = Net(in)
grad = torch.autograd.grad(out, input)
import torch
f = torch.nn.Linear(10, 5)
f.requires_grad_(False)
x = torch.nn.Parameter(torch.rand(10), requires_grad=True)
optim = torch.optim.SGD([x], lr=1e-1)
mse = torch.nn.MSELoss()
y = torch.ones(5) # the desired network response
num_steps = 5 # how many optim steps to take
for _ in range(num_steps):
loss = mse(f(x), y)
loss.backward()
optim.step()
optim.zero_grad()