Might be good to use a name other than `dimensions` here, if you're going to move it out of `ens_args`.  Would help avoid confusion between the dimension of the ensemblearray (`n_ensembles * dimensions`) and the dimension of the ensembles.  Would also avoid code like this in Product (`self.product = EnsembleArray(neurons, dimensions, dimensions=2,...`), which I think is not an uncommon usage.  Maybe `dimensions_per` or something?