zez*_*ezo 8 optimization neural-network pytorch
我有一个 pytorch 网络,已经过训练并且权重已更新(完整训练)。
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(1, H)
self.fc2 = nn.Linear(1, H)
self.fc3 = nn.Linear(H, 1)
def forward(self, x, y):
h1 = F.relu(self.fc1(x)+self.fc2(y))
h2 = self.fc3(h1)
return h2
Run Code Online (Sandbox Code Playgroud)
训练后,我想最大化网络相对于输入的输出。换句话说,我想优化输入以最大化神经网络输出,而不改变权重。我怎样才能做到这一点。我的尝试,但没有意义:
in = torch.autograd.Variable(x)
out = Net(in)
grad = torch.autograd.grad(out, input)
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
但请确保您的目标张量已明确定义。网络的单调性,否则你可能会得到 nan。