batches method
Lazily produce one full pass over the dataset as batches.
Implementation
Iterable<List<T>> batches() sync* {
final n = dataset.length;
final order = List<int>.generate(n, (i) => i);
if (shuffle) order.shuffle(_rng);
for (int start = 0; start < n; start += batchSize) {
final end = math.min(start + batchSize, n);
if (dropLast && end - start < batchSize) break;
yield [for (int k = start; k < end; k++) dataset[order[k]]];
}
}