Introduction
Model comparison helps us find which model works best for our task by checking their results side by side.
Jump into concepts and practice - no test required
1. Train or load multiple models. 2. Evaluate each model on the same test data. 3. Compare metrics like accuracy, loss, or speed. 4. Choose the model with the best balance for your needs.
# Evaluate two models on test data acc_model1 = model1.evaluate(test_images, test_labels, verbose=0)[1] acc_model2 = model2.evaluate(test_images, test_labels, verbose=0)[1] print(f"Model1 accuracy: {acc_model1}") print(f"Model2 accuracy: {acc_model2}")
# Compare inference time import time start = time.time() model1.predict(test_images[:10]) print(f"Model1 time: {time.time() - start} seconds") start = time.time() model2.predict(test_images[:10]) print(f"Model2 time: {time.time() - start} seconds")
import tensorflow as tf from tensorflow.keras import layers, models # Load sample data (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 # Model 1: Simple CNN model1 = models.Sequential([ layers.Reshape((28,28,1), input_shape=(28,28)), layers.Conv2D(16, 3, activation='relu'), layers.MaxPooling2D(), layers.Flatten(), layers.Dense(10, activation='softmax') ]) model1.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model1.fit(train_images, train_labels, epochs=2, verbose=0) # Model 2: Deeper CNN model2 = models.Sequential([ layers.Reshape((28,28,1), input_shape=(28,28)), layers.Conv2D(32, 3, activation='relu'), layers.MaxPooling2D(), layers.Conv2D(64, 3, activation='relu'), layers.MaxPooling2D(), layers.Flatten(), layers.Dense(10, activation='softmax') ]) model2.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model2.fit(train_images, train_labels, epochs=2, verbose=0) # Evaluate both models loss1, acc1 = model1.evaluate(test_images, test_labels, verbose=0) loss2, acc2 = model2.evaluate(test_images, test_labels, verbose=0) print(f"Model 1 accuracy: {acc1:.4f}") print(f"Model 2 accuracy: {acc2:.4f}")
evaluate on test data returns loss and accuracy; index 1 is accuracy.fit trains, not evaluates; predict gives predictions, not accuracy; score needs both data and labels.acc1 = 0.85
acc2 = 0.90
if acc1 > acc2:
print('Model 1 is better')
else:
print('Model 2 is better')acc1 = model1.evaluate(X_test, y_test)
acc2 = model2.evaluate(X_test, y_test)
if acc1 > acc2:
print('Model 1 better')
else:
print('Model 2 better')