Model versioning in TensorFlow - ML Experiment: Train & Evaluate
import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import mnist import os # Load data (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 # Build model function def build_model(): model = models.Sequential([ layers.Flatten(input_shape=(28, 28)), layers.Dense(128, activation='relu'), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model # Train and save version 1 model_v1 = build_model() model_v1.fit(x_train, y_train, epochs=5, validation_split=0.1, verbose=0) version1_path = 'saved_models/model_v1' os.makedirs(version1_path, exist_ok=True) model_v1.save(version1_path) # Train and save version 2 with more epochs model_v2 = build_model() model_v2.fit(x_train, y_train, epochs=10, validation_split=0.1, verbose=0) version2_path = 'saved_models/model_v2' os.makedirs(version2_path, exist_ok=True) model_v2.save(version2_path) # Load and evaluate both versions loaded_v1 = tf.keras.models.load_model(version1_path) loaded_v2 = tf.keras.models.load_model(version2_path) loss_v1, acc_v1 = loaded_v1.evaluate(x_test, y_test, verbose=0) loss_v2, acc_v2 = loaded_v2.evaluate(x_test, y_test, verbose=0) print(f'Version 1 - Loss: {loss_v1:.4f}, Accuracy: {acc_v1:.4f}') print(f'Version 2 - Loss: {loss_v2:.4f}, Accuracy: {acc_v2:.4f}')
Before: Only one model saved without version info, hard to track changes.
After: Two models saved as 'model_v1' and 'model_v2' with different training epochs. Version 2 shows better accuracy (~98.5%) than version 1 (~97.5%).
Practice
What is the main purpose of model versioning in TensorFlow?
Solution
Step 1: Understand model versioning concept
Model versioning means saving multiple copies of a model with clear labels or versions.Step 2: Identify the main purpose
This helps to keep track of changes, compare models, and deploy the right one safely.Final Answer:
To save and manage different copies of a model safely -> Option DQuick Check:
Model versioning = save/manage copies [OK]
- Confusing versioning with speeding up training
- Thinking versioning changes model code
- Mixing versioning with visualization
Which of the following is the correct way to save a TensorFlow model with a version number?
model.save(_____)Solution
Step 1: Check folder naming for versioning
Using a folder name like 'my_model/v1' clearly indicates version 1 of the model.Step 2: Confirm correct syntax for saving
Themodel.save()function accepts a path string; 'my_model/v1' is a valid path with version info.Final Answer:
'my_model/v1' -> Option AQuick Check:
Save path with version folder = 'my_model/v1' [OK]
- Not including version info in folder name
- Using invalid folder path syntax
- Confusing file name with folder path
Given the code below, what will be printed?
import tensorflow as tf
model = tf.keras.Sequential([tf.keras.layers.Dense(1)])
model.save('models/v2')
loaded_model = tf.keras.models.load_model('models/v2')
print(type(loaded_model))Solution
Step 1: Understand model saving and loading
Saving a Sequential model and loading it returns the same model type, which istf.keras.Sequential.Step 2: Check the printed type
Thetype(loaded_model)will show <class 'tensorflow.keras.Sequential'> indicating the loaded model is a Sequential model.Final Answer:
<class 'tensorflow.keras.Sequential'> -> Option CQuick Check:
Loaded model type = Sequential [OK]
- Confusing model class with layer class
- Expecting generic Model class instead of Sequential
- Misreading printed type format
What is wrong with this code snippet for loading a specific model version?
loaded_model = tf.keras.models.load_model('my_model')
# But the saved models are in folders 'my_model/v1', 'my_model/v2'Solution
Step 1: Check the folder structure for saved models
Models are saved in versioned folders like 'my_model/v1' and 'my_model/v2', not directly in 'my_model'.Step 2: Identify the loading path issue
Loading from 'my_model' will fail because that folder does not contain a saved model directly.Final Answer:
It tries to load a folder without version info, causing an error -> Option BQuick Check:
Load path must include version folder [OK]
- Ignoring version folder in load path
- Using wrong load function name
- Assuming .h5 file is always needed
You have saved three versions of a model: model/v1, model/v2, and model/v3. You want to load the latest version automatically in your code. Which approach is best?
Solution
Step 1: Understand the need for automatic version selection
Manually changing paths is error-prone; automatic selection is better for deployment.Step 2: Use code to list and pick the highest version folder
Listing folders like 'v1', 'v2', 'v3' and selecting the highest number ensures loading the latest model.Final Answer:
Write code to list folders and select the highest version number folder -> Option AQuick Check:
Auto-select latest version by folder listing [OK]
- Hardcoding version path causing manual errors
- Loading oldest version by mistake
- Ignoring version folders and mixing models
Ready to prove it?
Pass the test and this pattern moves unknown
