Hi,
There are few things:

GANs are a different architecture/loss to deal with generating images, you can do it with a simple MLP too (input, output and loss functions are the only things that matter - at least to me!).
You have mentioned that you want use a trained network (freezed weights) and only update input to satisfy a loss (similar to number 6). But you have passed model.parameters() instead of input to the optimizer, so your optimizer does not know anything about input. Just pass inputs to optimizer!
Put your model in model.eval() mode as it could have batch norm or dropout layers.

Other parts seem fine to me.
Bests