I’m new to PyTorch so you’ll have to forgive me for this basic question. I couldn’t find an answer on the forums.
Okay, so you have a simple function like this:
def square(x):
    return x**2 

Optimizing it is trivial (I am aware that this is a silly example):
params = torch.tensor([4.])
params.requires_grad_()

print(square(params))
# Do gradient descent
n_optim_steps = int(1e4)
optimizer = torch.optim.SGD([params], 1e-2)

for ii in range(n_optim_steps):
    optimizer.zero_grad()
    loss = square(params)

    print('Step # {}, loss: {}'.format(ii, loss.item()))
    loss.backward()
    # Access gradient if necessary
    grad = params.grad.data
    optimizer.step()

But what if we change the function “square” a bit so that it becomes:
def square_x_then_multiply_y(x, y):
    return x**2 * y

Is there a trivial way to optimize the function with respect to x for a fixed y?
Thanks!