 # Example: Mixing Optimizers

I’m confused about the Example: Mixing Optimizers docs
https://pyro.ai/examples/custom_objectives.html#Example:-Mixing-Optimizers

In

``````adam = torch.optim.Adam(adam_parameters, {"lr": 0.001, "betas": (0.90, 0.999)})
sgd = torch.optim.SGD(sgd_parameters, {"lr": 0.0001})
loss_fn = pyro.infer.Trace_ELBO().differentiable_loss
# compute loss
loss = loss_fn(model, guide)
loss.backward()
# take a step and zero the parameter gradients
sgd.step()
``````

What are `adam_parameters` and `sgd_parameters`? The string labels given to pyro.param? A list of them?

Also, where do the arguments for model/guide go?

I have been using `pyro.infer.svi.SVI.step(data,dictionary)`, where we `model`/`guide` are called as `model/guide(data,dictionary)`, but now want to use different step sizes and a custom learning schedule, and am wondering where to pass data and dictionary.

I read some docs torch.optim — PyTorch 1.11.0 documentation and got it

``````adam = torch.optim.Adam(pytorch_model.parameters(), lr=1e-3)
loss_fn = pyro.infer.Trace_ELBO().differentiable_loss
loss = loss_fn(model, guide, data, args_dict)
loss.backward()
``````

Where pytorch_model is a deep net that inherits from the `torch.nn.Module` class, and that I did `pyro.module("pytorch_model", pytorch_model)`.

I think the these lines of the pyro docs do not match with what is on the pytorch docs

``````adam = torch.optim.Adam(adam_parameters, {"lr": 0.001, "betas": (0.90, 0.999)})
sgd = torch.optim.SGD(sgd_parameters, {"lr": 0.0001})
``````

A list (iterable) of `pyro.param` string labels

They are passed to the loss function as `*args, **kwargs`:

``````loss = loss_fn(model, guide, *args, **kwargs)
``````