alter data provider to prevent it from loading all batches into memory upon initialization. this makes each minibatch take
about 40% longer, but is necessary for running larger datasets (we can't reasonably load 2Tb of images into memory). a more intelligent
caching mecahnism (loading X number of batches into memory at a time) would remove this performance hit, but might not be enough
to justify the added code complexity...