I think you should do out = pm.MvNormal('out', mu=regression, cov=R, observed=Y_train), there is no observed in your model and training/prediction has no effect.
In general, sample_ppc output the ppc of observed RVs by default.
In you code above, because you did not associate an observed to out, the model is sampling from the prior, and the posterior prediction has no output. You can specify a variable to sample from: ppc = pm.sample_ppc(trace, samples=500, vars=neural_network.out)
There is a subtle thing here: I am doing vars=neural_network.out because the way you write down the model I am not sure RV out is directly available, otherwise you can just do vars=out. But if you associate an observed then your code should work without specifying vars=.