I wonder what happens to SVI when the priors are not specified, i.e., by setting `priors={}`

, or mistakenly using names that are identical between `model`

and `guide`

but different from the names in the network as discussed in this post?

According to the above post, SVI will just do ML point estimation. Is there anything else that SVI does? To find out, I implemented the **first approach** with `priors={}`

.

Then, I implemented **the second approach** without calling SVI and instead directly work with the optimizer. However, the classification accuracies are very different – 95% vs 70%. I wonder if there is anything else that SVI does when priors are empty. Thanks.

**The first approach:**

```
def network():
...
myNet = network()
def model(x_data, y_data):
priors = {}
lifted_module = pyro.random_module("module", myNet, priors)
lifted_reg_model = lifted_module()
yhat = lifted_reg_model(x_data)
pyro.sample("obs", Categorical(logits=yhat), obs=y_data)
def guide(x_data, y_data): # lma, 2/1/2019
priors={}
lifted_module = pyro.random_module("module", myNet, priors)
return lifted_module()
optim = Adam({"lr": current_lr})
loss += svi.step(data[0].cuda(), data[1].cuda())
```

**The second approach:**

```
optim = torch.optim.Adam(myNet.parameters(), lr=current_lr)
…
batch_loss = loss_fn(yhats, data[1].cuda())
batch_loss.backward()
optim.step()
```