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:

  1. Install Keras, TensorFlow, and TensorBoard.
    $ python -m pip install --upgrade keras tensorflow tensorboard
  2. 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.

  3. 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
  4. Confirm that an event file was written.

    event files: 1 means the callback created TensorBoard data under the configured log directory.

  5. 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.