Several minibatch parameters

I see… maybe something like:

data_shared = theano.shared(data)
ix1shared = theano.shared(ix1)
ix2shared = theano.shared(ix2)
maskshared = theano.shared(~mask)

ridx = pm.tt_rng().uniform(size=(batchshape,), low=0, high=data.shape[0]-1e-10).astype(‘int64’)

then replace in your code:
ix1[:, 0], ix2 --> ix1shared[ridx, 0], ix2[ridx]
mu[~mask] --> mu[mask[ridx, :, :]]
data[~mask] --> data[maskshared[ridx, :, :]]