Optimization 如何使用Pytork找到最大化神经网络输出的输入

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) 禁用网络的渐变 将输入张量设置为需要梯度的参数 初始化包装输入张量的优化器

我有一个pytorch网络,已经过培训,并更新了权重(完整培训)

在培训之后,我想最大限度地提高网络的输入输出。换句话说,我想优化输入,使神经网络输出最大化,而不改变权重。我怎样才能做到这一点。 我的审判,但没有意义:

in     = torch.autograd.Variable(x)
out    = Net(in)
grad   = torch.autograd.grad(out, input)

      
  • 禁用网络的渐变
  • 将输入张量设置为需要梯度的参数
  • 初始化包装输入张量的优化器
  • 具有损失函数和目标张量的Backprop
  • 利润
    但要确保你的目标张量是明确的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()