TensorBoard logs let a Keras training run record metrics, graphs, histograms, and profiling data for later inspection. The built-in keras.callbacks.TensorBoard callback writes event files while model.fit() runs.
The callback requires TensorFlow because TensorBoard event writing is TensorFlow-based. Set the log directory per run so event files from different experiments do not overwrite or mix with each other.
Start with epoch-level scalar logging for loss and metrics. Add histograms, images, or profiling only when needed because frequent logging can slow training.
Steps to log to TensorBoard in Keras:
- Install Keras, TensorFlow, and TensorBoard.
$ python -m pip install --upgrade keras tensorflow tensorboard
- Create log_tensorboard.py.
- log_tensorboard.py
import os import shutil from pathlib import Path os.environ["KERAS_BACKEND"] = "tensorflow" os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" import keras import numpy as np keras.utils.set_random_seed(31) log_dir = Path("logs/tensorboard-demo") if log_dir.exists(): shutil.rmtree(log_dir) x_train = np.linspace(0.0, 1.0, 80, dtype="float32").reshape(20, 4) y_train = ((x_train[:, 0] + x_train[:, 1]) > 0.8).astype("float32") model = keras.Sequential( [ keras.Input(shape=(4,), name="features"), keras.layers.Dense(8, activation="relu"), keras.layers.Dense(1, activation="sigmoid"), ] ) model.compile( optimizer=keras.optimizers.Adam(learning_rate=0.03), loss=keras.losses.BinaryCrossentropy(), metrics=[keras.metrics.BinaryAccuracy(name="accuracy")], ) callback = keras.callbacks.TensorBoard( log_dir=log_dir, histogram_freq=0, write_graph=False, update_freq="epoch", ) history = model.fit(x_train, y_train, epochs=2, batch_size=5, callbacks=[callback], verbose=0) event_files = sorted(path for path in log_dir.rglob("events.out.tfevents.*") if path.is_file()) print(f"backend: {keras.backend.backend()}") print(f"log directory: {log_dir}") print(f"epochs completed: {len(history.history['loss'])}") print(f"event files: {len(event_files)}") print(f"first event file: {event_files[0] if event_files else 'none'}") print(f"view command: tensorboard --logdir {log_dir}")
Use a unique log_dir for every run or experiment variant.
- Run the script.
$ python log_tensorboard.py backend: tensorflow log directory: logs/tensorboard-demo epochs completed: 2 event files: 1 first event file: logs/tensorboard-demo/train/events.out.tfevents.1783350249.643c51bdba63.453.0.v2 view command: tensorboard --logdir logs/tensorboard-demo
- Confirm that an event file was written.
event files: 1 means the callback created TensorBoard data under the configured log directory.
- Open TensorBoard against the log directory.
$ tensorboard --logdir logs/tensorboard-demo
Use the URL printed by TensorBoard to inspect scalar charts for loss and accuracy.
Mohd Shakir Zakaria is a cloud architect with deep roots in software development and open-source advocacy. Certified in AWS, Red Hat, VMware, ITIL, and Linux, he specializes in designing and managing robust cloud and on-premises infrastructures.