I’m trying to build and train a simple neural network using TensorFlow and Keras, but I’m running into an issue where the metrics I specify in model.compile are not properly recognized.
Specifically, after compiling and training the model, when I print the metrics and metrics_names, I see [‘loss’, ‘compile_metrics’] instead of the expected metrics ([‘loss’, ‘accuracy’, ‘precision’, ‘recall’]).
Here is the code I’m using
import tensorflow as tf
import numpy as np
from tensorflow import keras
# Create a simple model
def create_model():
model = tf.keras.Sequential([
tf.keras.layers.Dense(16, activation='relu', input_shape=(3,)),
tf.keras.layers.Dense(1, activation='sigmoid')
])
return model
# Test function to demonstrate `metrics` and `metrics_names`
def test_metrics_properties():
# Create and compile the model
model = create_model()
model.compile(optimizer='adam',
loss=keras.losses.BinaryCrossentropy(),
metrics=[
tf.keras.metrics.BinaryAccuracy(name='accuracy'),
tf.keras.metrics.Precision(name='precision'),
tf.keras.metrics.Recall(name='recall')
])
# Check `metrics` and `metrics_names` before training
print("Before training:")
print("Metrics:", [m.name for m in model.metrics])
print("Metrics names:", model.metrics_names)
# Generate dummy data
x = np.random.random((100, 3))
y = np.random.randint(0, 2, size=(100, 1))
# Train the model
model.fit(x, y, epochs=5, verbose=0)
# Check `metrics` and `metrics_names` after training
print("nAfter training:")
print("Metrics:", [m.name for m in model.metrics])
print("Metrics names:", model.metrics_names)
if __name__ == "__main__":
test_metrics_properties()
Here’s the output I’m seeing:
/path/to/your/env/lib/python3.12/site-packages/keras/src/layers/core/dense.py:87: UserWarning: Do not pass an input_shape
/input_dim
argument to a layer. When using Sequential models, prefer using an Input(shape)
object as the first layer in the model instead.
super().init(activity_regularizer=activity_regularizer, **kwargs)
Before training:
Metrics: [‘loss’, ‘compile_metrics’]
Metrics names: [‘loss’, ‘compile_metrics’]
After training:
Metrics: [‘loss’, ‘compile_metrics’]
Metrics names: [‘loss’, ‘compile_metrics’]
- I’ve ensured that the metrics are properly defined in the compile method.
- For the other neuralnet model that I built, it has the same issue, I can access the value for each individual metrics in the training history, but the metric names are not properpy returns using model.metrics_name.
Jeff Clark is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.