I’m trying to understand how optimization and backpropagation work.
In this code from Neural style transfer 3:
optimizer = optim.LBFGS([opt_img]);
n_iter=[0]

while n_iter[0] <= max_iter:

    def closure():
        optimizer.zero_grad()
        out = vgg(opt_img, loss_layers)
        layer_losses = [weights[a] * loss_fns[a](A, targets[a]) for a,A in enumerate(out)]
        loss = sum(layer_losses)
        loss.backward()
        n_iter[0]+=1
        return loss
    
    optimizer.step(closure)

Do the pretrained weights of VGG optimized?
(Or, do both opt_img and the weights of VGG optimized by LBFGS?)
(Do the weights of VGG stay same for every iterations, or they get optimized and different for each iterations?)