The one-call training loop
model.fit() runs the whole loop: forward, loss, backward, update, metric tracking — for every batch, every epoch. It also handles validation, callbacks, and progress display.
The returned history object is your primary diagnostic. Plot history.history['loss'] vs history.history['val_loss'] to see overfitting in real time. Same for accuracy or any other metric you tracked.
Pass a tf.data.Dataset for large datasets. NumPy arrays load everything into memory. Datasets stream in lazily and parallelize preprocessing. We'll dive into tf.data in the next track — for now, know that it integrates seamlessly with fit().