I see. It is possible that the mapping from vector to dict is different every time the model is initiated, which means the order of the saveparam (as it is a 1d vector) the elements does not have the same order between the two models.
The safe way to do is to save the parameters as a dictionary, and map it back to a vector whenever the new model is created.
...
# save inference
logp = model.logp_dlogp_function()
saveparam = {param.name : logp.array_to_dict(param.eval())
for param in inference.approx.params}
# new model
model2 = construct_neural_network(
X, Y, Yerr, neuronsPerHiddenlayer, ninputs, noutputs, ndata)
with model2:
inference2 = pm.ADVI()
# load inference
logp2 = model2.logp_dlogp_function()
inference2.approx.params[0].set_value(logp.dict_to_array(saveparam['mu']))
inference2.approx.params[1].set_value(logp.dict_to_array(saveparam['rho']))