What happens to SVI if priors are not specified?

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()