Export a SavedModel in Tensorflow
Last Updated :
08 Jun, 2023
In TensorFlow, a SavedModel is basically a serialized format for storing a complete TensorFlow program. The tf.saved_model.save() function in TensorFlow can be used to export a SavedModel. A trained model and its related variables are saved to disc in the SavedModel format by this function. It includes weights and computation graphs. This model can be used for deploying models for inference, transfer learning, or other purposes.
An illustration of code that shows how to export a SavedModel in Tensorflow is shown below:
Here are the following steps to export a SavedModel in TensorFlow:
Now we can take an example of exporting a Softmax Regression model in TensorFlow:
Step 1:
Create a Softmax Regression model and train it using the MNIST dataset.
Python
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0 , x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape = ( 28 , 28 )),
tf.keras.layers.Dense( 10 , activation = 'softmax' )
])
model. compile (optimizer = 'adam' ,
loss = 'sparse_categorical_crossentropy' ,
metrics = [ 'accuracy' ])
model.fit(x_train, y_train, epochs = 5 , validation_data = (x_test, y_test))
|
Output:
Epoch 1/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.4726 - accuracy: 0.8764 - val_loss: 0.3060 - val_accuracy: 0.9154
Epoch 2/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.3038 - accuracy: 0.9158 - val_loss: 0.2808 - val_accuracy: 0.9222
Epoch 3/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.2831 - accuracy: 0.9209 - val_loss: 0.2758 - val_accuracy: 0.9235
Epoch 4/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.2734 - accuracy: 0.9229 - val_loss: 0.2688 - val_accuracy: 0.9256
Epoch 5/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.2661 - accuracy: 0.9257 - val_loss: 0.2675 - val_accuracy: 0.9267
Step 2:
Evaluate the model accuracy:
Python3
loss, accuracy = model.evaluate(x_test, y_test)
print ( 'The accuracy of the model is :' ,accuracy)
|
Output:
313/313 [==============================] - 0s 1ms/step - loss: 0.2675 - accuracy: 0.9267
The accuracy of the model is : 0.9266999959945679
Step 3:
Save the model using the tf.saved_model.save function.
Python
tf.saved_model.save(model, 'softmax_regression_model' )
|
Step 4:
Verify that the model has been saved successfully by inspecting the contents of the SavedModel directory.
Python
!ls softmax_regression_model
|
Output :
assets fingerprint.pb saved_model.pb variables
The saved_model.pb file contains the computation graph and the variables folder contains the trained weights of the model.
Step 5:
Optionally, you can add version numbers to the SavedModel directory to keep track of different versions of the model.
Python
tf.saved_model.save(model, 'softmax_regression_model/1' )
|
Step 6:
Verify that the versioned model has been saved successfully.
Python
!ls softmax_regression_model / 1
|
Output:
assets fingerprint.pb saved_model.pb variables
The contents of the versioned directory are the same as of the original directory.
Step 7:
Let’s load the model using the TensorFlow hub
Python3
import tensorflow_hub as hub
import numpy as np
layer = hub.KerasLayer( "softmax_regression_model/" )
Input = np.linspace( 0 , 1 , 784 ).reshape( 28 , 28 )
Input = tf.expand_dims( Input , axis = 0 )
print (layer( Input ))
layer.trainable = True
print (layer.trainable_weights)
|
Output:
tf.Tensor(
[[2.9126030e-16 5.6060693e-19 5.5827466e-03 6.9878437e-03 2.6784150e-19
9.8738652e-01 1.5881575e-17 4.2873238e-05 3.4423101e-15 5.1269178e-10]], shape=(1, 10), dtype=float32)
[<tf.Variable 'dense/kernel:0' shape=(784, 10) dtype=float32, numpy=
array([[-0.02441423, 0.04307493, -0.00332485, ..., 0.03308415,
0.07554208, -0.00533313],
[ 0.01357713, -0.00179666, 0.08344419, ..., -0.07203246,
0.04122115, -0.08428719],
[-0.06156562, -0.08187176, -0.06699241, ..., -0.05588092,
-0.04787212, -0.05234763],
...,
[-0.02957132, 0.07599085, -0.07504247, ..., 0.03821079,
0.04094885, -0.03252703],
[ 0.01038309, -0.01061375, 0.03050219, ..., -0.02180967,
0.07942755, 0.01886416],
[-0.02210779, 0.06026974, -0.00152316, ..., -0.02114672,
-0.06010536, -0.05444371]], dtype=float32)>, <tf.Variable 'dense/bias:0' shape=(10,) dtype=float32, numpy=
array([-0.37059996, 0.48123115, 0.09208864, -0.29430756, 0.09193437,
0.9103967 , -0.08532815, 0.5119505 , -1.0492268 , -0.1949552 ],
dtype=float32)>]
Here are some of the different ways related to exporting a SavedModel in TensorFlow:
- Exporting a SavedModel with custom signatures: You can directly specify custom signatures for your SavedModel that can define the inputs and the outputs of the model. This can be useful for serving the model using various interfaces, such as the REST APIs.
- Exporting a SavedModel for TensorFlow Serving: TensorFlow Serving is basically a system for serving machine learning models in production environments. To export a model for the TensorFlow Serving, first, you need to include a serving_default signature that can specify the inputs and outputs of the model.
- Exporting a SavedModel for TensorFlow Lite: TensorFlow Lite is a framework used for deploying machine learning
Share your thoughts in the comments
Please Login to comment...