Coursera

#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Running TFLite Models

Setup

try:
    %tensorflow_version 2.x
except:
    pass
Colab only includes TensorFlow 2.x; %tensorflow_version has no effect.
import pathlib
import numpy as np
import matplotlib.pyplot as plt

import tensorflow as tf

print('\u2022 Using TensorFlow Version:', tf.__version__)
• Using TensorFlow Version: 2.13.0

Create a Basic Model of the Form y = mx + c

# Create a simple Keras model.
x = [-1, 0, 1, 2, 3, 4]
y = [-3, -1, 1, 3, 5, 7]

model = tf.keras.models.Sequential([
        tf.keras.layers.Dense(units=1, input_shape=[1])
])

model.compile(optimizer='sgd',
              loss='mean_squared_error')

model.fit(x, y, epochs=200)
Epoch 1/200
1/1 [==============================] - 4s 4s/step - loss: 34.5728
Epoch 2/200
1/1 [==============================] - 0s 21ms/step - loss: 27.5327
Epoch 3/200
1/1 [==============================] - 0s 17ms/step - loss: 21.9872
Epoch 4/200
1/1 [==============================] - 0s 16ms/step - loss: 17.6174
Epoch 5/200
1/1 [==============================] - 0s 11ms/step - loss: 14.1730
Epoch 6/200
1/1 [==============================] - 0s 19ms/step - loss: 11.4567
Epoch 7/200
1/1 [==============================] - 0s 10ms/step - loss: 9.3133
Epoch 8/200
1/1 [==============================] - 0s 10ms/step - loss: 7.6209
Epoch 9/200
1/1 [==============================] - 0s 19ms/step - loss: 6.2833
Epoch 10/200
1/1 [==============================] - 0s 24ms/step - loss: 5.2251
Epoch 11/200
1/1 [==============================] - 0s 13ms/step - loss: 4.3867
Epoch 12/200
1/1 [==============================] - 0s 21ms/step - loss: 3.7215
Epoch 13/200
1/1 [==============================] - 0s 17ms/step - loss: 3.1925
Epoch 14/200
1/1 [==============================] - 0s 19ms/step - loss: 2.7710
Epoch 15/200
1/1 [==============================] - 0s 34ms/step - loss: 2.4340
Epoch 16/200
1/1 [==============================] - 0s 12ms/step - loss: 2.1636
Epoch 17/200
1/1 [==============================] - 0s 66ms/step - loss: 1.9458
Epoch 18/200
1/1 [==============================] - 0s 18ms/step - loss: 1.7694
Epoch 19/200
1/1 [==============================] - 0s 16ms/step - loss: 1.6258
Epoch 20/200
1/1 [==============================] - 0s 28ms/step - loss: 1.5080
Epoch 21/200
1/1 [==============================] - 0s 21ms/step - loss: 1.4106
Epoch 22/200
1/1 [==============================] - 0s 10ms/step - loss: 1.3293
Epoch 23/200
1/1 [==============================] - 0s 17ms/step - loss: 1.2609
Epoch 24/200
1/1 [==============================] - 0s 18ms/step - loss: 1.2027
Epoch 25/200
1/1 [==============================] - 0s 22ms/step - loss: 1.1525
Epoch 26/200
1/1 [==============================] - 0s 10ms/step - loss: 1.1088
Epoch 27/200
1/1 [==============================] - 0s 70ms/step - loss: 1.0703
Epoch 28/200
1/1 [==============================] - 0s 16ms/step - loss: 1.0359
Epoch 29/200
1/1 [==============================] - 0s 14ms/step - loss: 1.0049
Epoch 30/200
1/1 [==============================] - 0s 14ms/step - loss: 0.9766
Epoch 31/200
1/1 [==============================] - 0s 14ms/step - loss: 0.9505
Epoch 32/200
1/1 [==============================] - 0s 28ms/step - loss: 0.9262
Epoch 33/200
1/1 [==============================] - 0s 12ms/step - loss: 0.9035
Epoch 34/200
1/1 [==============================] - 0s 13ms/step - loss: 0.8820
Epoch 35/200
1/1 [==============================] - 0s 30ms/step - loss: 0.8615
Epoch 36/200
1/1 [==============================] - 0s 19ms/step - loss: 0.8420
Epoch 37/200
1/1 [==============================] - 0s 18ms/step - loss: 0.8233
Epoch 38/200
1/1 [==============================] - 0s 12ms/step - loss: 0.8053
Epoch 39/200
1/1 [==============================] - 0s 17ms/step - loss: 0.7878
Epoch 40/200
1/1 [==============================] - 0s 13ms/step - loss: 0.7709
Epoch 41/200
1/1 [==============================] - 0s 13ms/step - loss: 0.7546
Epoch 42/200
1/1 [==============================] - 0s 19ms/step - loss: 0.7386
Epoch 43/200
1/1 [==============================] - 0s 11ms/step - loss: 0.7231
Epoch 44/200
1/1 [==============================] - 0s 10ms/step - loss: 0.7080
Epoch 45/200
1/1 [==============================] - 0s 12ms/step - loss: 0.6932
Epoch 46/200
1/1 [==============================] - 0s 28ms/step - loss: 0.6788
Epoch 47/200
1/1 [==============================] - 0s 32ms/step - loss: 0.6648
Epoch 48/200
1/1 [==============================] - 0s 16ms/step - loss: 0.6510
Epoch 49/200
1/1 [==============================] - 0s 19ms/step - loss: 0.6376
Epoch 50/200
1/1 [==============================] - 0s 16ms/step - loss: 0.6244
Epoch 51/200
1/1 [==============================] - 0s 16ms/step - loss: 0.6115
Epoch 52/200
1/1 [==============================] - 0s 28ms/step - loss: 0.5989
Epoch 53/200
1/1 [==============================] - 0s 66ms/step - loss: 0.5866
Epoch 54/200
1/1 [==============================] - 0s 28ms/step - loss: 0.5745
Epoch 55/200
1/1 [==============================] - 0s 15ms/step - loss: 0.5627
Epoch 56/200
1/1 [==============================] - 0s 11ms/step - loss: 0.5511
Epoch 57/200
1/1 [==============================] - 0s 10ms/step - loss: 0.5398
Epoch 58/200
1/1 [==============================] - 0s 13ms/step - loss: 0.5287
Epoch 59/200
1/1 [==============================] - 0s 16ms/step - loss: 0.5178
Epoch 60/200
1/1 [==============================] - 0s 30ms/step - loss: 0.5072
Epoch 61/200
1/1 [==============================] - 0s 15ms/step - loss: 0.4968
Epoch 62/200
1/1 [==============================] - 0s 15ms/step - loss: 0.4866
Epoch 63/200
1/1 [==============================] - 0s 18ms/step - loss: 0.4766
Epoch 64/200
1/1 [==============================] - 0s 26ms/step - loss: 0.4668
Epoch 65/200
1/1 [==============================] - 0s 37ms/step - loss: 0.4572
Epoch 66/200
1/1 [==============================] - 0s 41ms/step - loss: 0.4478
Epoch 67/200
1/1 [==============================] - 0s 50ms/step - loss: 0.4386
Epoch 68/200
1/1 [==============================] - 0s 50ms/step - loss: 0.4296
Epoch 69/200
1/1 [==============================] - 0s 35ms/step - loss: 0.4208
Epoch 70/200
1/1 [==============================] - 0s 45ms/step - loss: 0.4121
Epoch 71/200
1/1 [==============================] - 0s 49ms/step - loss: 0.4036
Epoch 72/200
1/1 [==============================] - 0s 68ms/step - loss: 0.3954
Epoch 73/200
1/1 [==============================] - 0s 72ms/step - loss: 0.3872
Epoch 74/200
1/1 [==============================] - 0s 37ms/step - loss: 0.3793
Epoch 75/200
1/1 [==============================] - 0s 33ms/step - loss: 0.3715
Epoch 76/200
1/1 [==============================] - 0s 11ms/step - loss: 0.3639
Epoch 77/200
1/1 [==============================] - 0s 46ms/step - loss: 0.3564
Epoch 78/200
1/1 [==============================] - 0s 23ms/step - loss: 0.3491
Epoch 79/200
1/1 [==============================] - 0s 29ms/step - loss: 0.3419
Epoch 80/200
1/1 [==============================] - 0s 42ms/step - loss: 0.3349
Epoch 81/200
1/1 [==============================] - 0s 43ms/step - loss: 0.3280
Epoch 82/200
1/1 [==============================] - 0s 22ms/step - loss: 0.3213
Epoch 83/200
1/1 [==============================] - 0s 34ms/step - loss: 0.3147
Epoch 84/200
1/1 [==============================] - 0s 12ms/step - loss: 0.3082
Epoch 85/200
1/1 [==============================] - 0s 11ms/step - loss: 0.3019
Epoch 86/200
1/1 [==============================] - 0s 32ms/step - loss: 0.2957
Epoch 87/200
1/1 [==============================] - 0s 12ms/step - loss: 0.2896
Epoch 88/200
1/1 [==============================] - 0s 30ms/step - loss: 0.2836
Epoch 89/200
1/1 [==============================] - 0s 14ms/step - loss: 0.2778
Epoch 90/200
1/1 [==============================] - 0s 15ms/step - loss: 0.2721
Epoch 91/200
1/1 [==============================] - 0s 17ms/step - loss: 0.2665
Epoch 92/200
1/1 [==============================] - 0s 25ms/step - loss: 0.2610
Epoch 93/200
1/1 [==============================] - 0s 32ms/step - loss: 0.2557
Epoch 94/200
1/1 [==============================] - 0s 19ms/step - loss: 0.2504
Epoch 95/200
1/1 [==============================] - 0s 15ms/step - loss: 0.2453
Epoch 96/200
1/1 [==============================] - 0s 13ms/step - loss: 0.2402
Epoch 97/200
1/1 [==============================] - 0s 15ms/step - loss: 0.2353
Epoch 98/200
1/1 [==============================] - 0s 15ms/step - loss: 0.2305
Epoch 99/200
1/1 [==============================] - 0s 19ms/step - loss: 0.2257
Epoch 100/200
1/1 [==============================] - 0s 32ms/step - loss: 0.2211
Epoch 101/200
1/1 [==============================] - 0s 16ms/step - loss: 0.2166
Epoch 102/200
1/1 [==============================] - 0s 11ms/step - loss: 0.2121
Epoch 103/200
1/1 [==============================] - 0s 18ms/step - loss: 0.2078
Epoch 104/200
1/1 [==============================] - 0s 17ms/step - loss: 0.2035
Epoch 105/200
1/1 [==============================] - 0s 51ms/step - loss: 0.1993
Epoch 106/200
1/1 [==============================] - 0s 29ms/step - loss: 0.1952
Epoch 107/200
1/1 [==============================] - 0s 18ms/step - loss: 0.1912
Epoch 108/200
1/1 [==============================] - 0s 22ms/step - loss: 0.1873
Epoch 109/200
1/1 [==============================] - 0s 31ms/step - loss: 0.1834
Epoch 110/200
1/1 [==============================] - 0s 16ms/step - loss: 0.1797
Epoch 111/200
1/1 [==============================] - 0s 27ms/step - loss: 0.1760
Epoch 112/200
1/1 [==============================] - 0s 10ms/step - loss: 0.1724
Epoch 113/200
1/1 [==============================] - 0s 10ms/step - loss: 0.1688
Epoch 114/200
1/1 [==============================] - 0s 48ms/step - loss: 0.1654
Epoch 115/200
1/1 [==============================] - 0s 64ms/step - loss: 0.1620
Epoch 116/200
1/1 [==============================] - 0s 16ms/step - loss: 0.1586
Epoch 117/200
1/1 [==============================] - 0s 13ms/step - loss: 0.1554
Epoch 118/200
1/1 [==============================] - 0s 23ms/step - loss: 0.1522
Epoch 119/200
1/1 [==============================] - 0s 23ms/step - loss: 0.1491
Epoch 120/200
1/1 [==============================] - 0s 14ms/step - loss: 0.1460
Epoch 121/200
1/1 [==============================] - 0s 24ms/step - loss: 0.1430
Epoch 122/200
1/1 [==============================] - 0s 11ms/step - loss: 0.1401
Epoch 123/200
1/1 [==============================] - 0s 11ms/step - loss: 0.1372
Epoch 124/200
1/1 [==============================] - 0s 21ms/step - loss: 0.1344
Epoch 125/200
1/1 [==============================] - 0s 47ms/step - loss: 0.1316
Epoch 126/200
1/1 [==============================] - 0s 19ms/step - loss: 0.1289
Epoch 127/200
1/1 [==============================] - 0s 11ms/step - loss: 0.1263
Epoch 128/200
1/1 [==============================] - 0s 11ms/step - loss: 0.1237
Epoch 129/200
1/1 [==============================] - 0s 31ms/step - loss: 0.1211
Epoch 130/200
1/1 [==============================] - 0s 28ms/step - loss: 0.1186
Epoch 131/200
1/1 [==============================] - 0s 38ms/step - loss: 0.1162
Epoch 132/200
1/1 [==============================] - 0s 15ms/step - loss: 0.1138
Epoch 133/200
1/1 [==============================] - 0s 30ms/step - loss: 0.1115
Epoch 134/200
1/1 [==============================] - 0s 24ms/step - loss: 0.1092
Epoch 135/200
1/1 [==============================] - 0s 15ms/step - loss: 0.1069
Epoch 136/200
1/1 [==============================] - 0s 11ms/step - loss: 0.1047
Epoch 137/200
1/1 [==============================] - 0s 17ms/step - loss: 0.1026
Epoch 138/200
1/1 [==============================] - 0s 12ms/step - loss: 0.1005
Epoch 139/200
1/1 [==============================] - 0s 17ms/step - loss: 0.0984
Epoch 140/200
1/1 [==============================] - 0s 34ms/step - loss: 0.0964
Epoch 141/200
1/1 [==============================] - 0s 19ms/step - loss: 0.0944
Epoch 142/200
1/1 [==============================] - 0s 20ms/step - loss: 0.0925
Epoch 143/200
1/1 [==============================] - 0s 20ms/step - loss: 0.0906
Epoch 144/200
1/1 [==============================] - 0s 25ms/step - loss: 0.0887
Epoch 145/200
1/1 [==============================] - 0s 35ms/step - loss: 0.0869
Epoch 146/200
1/1 [==============================] - 0s 16ms/step - loss: 0.0851
Epoch 147/200
1/1 [==============================] - 0s 14ms/step - loss: 0.0834
Epoch 148/200
1/1 [==============================] - 0s 37ms/step - loss: 0.0816
Epoch 149/200
1/1 [==============================] - 0s 18ms/step - loss: 0.0800
Epoch 150/200
1/1 [==============================] - 0s 15ms/step - loss: 0.0783
Epoch 151/200
1/1 [==============================] - 0s 41ms/step - loss: 0.0767
Epoch 152/200
1/1 [==============================] - 0s 12ms/step - loss: 0.0751
Epoch 153/200
1/1 [==============================] - 0s 18ms/step - loss: 0.0736
Epoch 154/200
1/1 [==============================] - 0s 15ms/step - loss: 0.0721
Epoch 155/200
1/1 [==============================] - 0s 17ms/step - loss: 0.0706
Epoch 156/200
1/1 [==============================] - 0s 44ms/step - loss: 0.0692
Epoch 157/200
1/1 [==============================] - 0s 11ms/step - loss: 0.0677
Epoch 158/200
1/1 [==============================] - 0s 25ms/step - loss: 0.0663
Epoch 159/200
1/1 [==============================] - 0s 12ms/step - loss: 0.0650
Epoch 160/200
1/1 [==============================] - 0s 11ms/step - loss: 0.0636
Epoch 161/200
1/1 [==============================] - 0s 29ms/step - loss: 0.0623
Epoch 162/200
1/1 [==============================] - 0s 18ms/step - loss: 0.0611
Epoch 163/200
1/1 [==============================] - 0s 19ms/step - loss: 0.0598
Epoch 164/200
1/1 [==============================] - 0s 20ms/step - loss: 0.0586
Epoch 165/200
1/1 [==============================] - 0s 17ms/step - loss: 0.0574
Epoch 166/200
1/1 [==============================] - 0s 39ms/step - loss: 0.0562
Epoch 167/200
1/1 [==============================] - 0s 50ms/step - loss: 0.0550
Epoch 168/200
1/1 [==============================] - 0s 38ms/step - loss: 0.0539
Epoch 169/200
1/1 [==============================] - 0s 45ms/step - loss: 0.0528
Epoch 170/200
1/1 [==============================] - 0s 45ms/step - loss: 0.0517
Epoch 171/200
1/1 [==============================] - 0s 47ms/step - loss: 0.0507
Epoch 172/200
1/1 [==============================] - 0s 42ms/step - loss: 0.0496
Epoch 173/200
1/1 [==============================] - 0s 19ms/step - loss: 0.0486
Epoch 174/200
1/1 [==============================] - 0s 38ms/step - loss: 0.0476
Epoch 175/200
1/1 [==============================] - 0s 28ms/step - loss: 0.0466
Epoch 176/200
1/1 [==============================] - 0s 27ms/step - loss: 0.0457
Epoch 177/200
1/1 [==============================] - 0s 18ms/step - loss: 0.0447
Epoch 178/200
1/1 [==============================] - 0s 16ms/step - loss: 0.0438
Epoch 179/200
1/1 [==============================] - 0s 19ms/step - loss: 0.0429
Epoch 180/200
1/1 [==============================] - 0s 13ms/step - loss: 0.0420
Epoch 181/200
1/1 [==============================] - 0s 30ms/step - loss: 0.0412
Epoch 182/200
1/1 [==============================] - 0s 30ms/step - loss: 0.0403
Epoch 183/200
1/1 [==============================] - 0s 57ms/step - loss: 0.0395
Epoch 184/200
1/1 [==============================] - 0s 39ms/step - loss: 0.0387
Epoch 185/200
1/1 [==============================] - 0s 20ms/step - loss: 0.0379
Epoch 186/200
1/1 [==============================] - 0s 32ms/step - loss: 0.0371
Epoch 187/200
1/1 [==============================] - 0s 21ms/step - loss: 0.0363
Epoch 188/200
1/1 [==============================] - 0s 19ms/step - loss: 0.0356
Epoch 189/200
1/1 [==============================] - 0s 37ms/step - loss: 0.0349
Epoch 190/200
1/1 [==============================] - 0s 14ms/step - loss: 0.0341
Epoch 191/200
1/1 [==============================] - 0s 14ms/step - loss: 0.0334
Epoch 192/200
1/1 [==============================] - 0s 21ms/step - loss: 0.0328
Epoch 193/200
1/1 [==============================] - 0s 15ms/step - loss: 0.0321
Epoch 194/200
1/1 [==============================] - 0s 9ms/step - loss: 0.0314
Epoch 195/200
1/1 [==============================] - 0s 32ms/step - loss: 0.0308
Epoch 196/200
1/1 [==============================] - 0s 50ms/step - loss: 0.0302
Epoch 197/200
1/1 [==============================] - 0s 39ms/step - loss: 0.0295
Epoch 198/200
1/1 [==============================] - 0s 31ms/step - loss: 0.0289
Epoch 199/200
1/1 [==============================] - 0s 23ms/step - loss: 0.0283
Epoch 200/200
1/1 [==============================] - 0s 21ms/step - loss: 0.0277





<keras.src.callbacks.History at 0x78e2cc2b7700>

Generate a SavedModel

export_dir = 'saved_model/1'
tf.saved_model.save(model, export_dir)

Convert the SavedModel to TFLite

# Convert the model.
converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)
tflite_model = converter.convert()
tflite_model_file = pathlib.Path('model.tflite')
tflite_model_file.write_bytes(tflite_model)
1080

Initialize the TFLite Interpreter To Try It Out

# Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_content=tflite_model)
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Test the TensorFlow Lite model on random input data.
input_shape = input_details[0]['shape']
inputs, outputs = [], []
for _ in range(100):
    input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
    interpreter.set_tensor(input_details[0]['index'], input_data)

    interpreter.invoke()
    tflite_results = interpreter.get_tensor(output_details[0]['index'])

    # Test the TensorFlow model on random input data.
    tf_results = model(tf.constant(input_data))
    output_data = np.array(tf_results)

    inputs.append(input_data[0][0])
    outputs.append(output_data[0][0])

Visualize the Model

%matplotlib inline

plt.plot(inputs, outputs, 'r')
plt.show()

png

Download the TFLite Model File

If you are running this notebook in a Colab, you can run the cell below to download the tflite model to your local disk.

Note: If the file does not download when you run the cell, try running the cell a second time.

try:
    from google.colab import files
    files.download(tflite_model_file)
except:
    pass
<IPython.core.display.Javascript object>



<IPython.core.display.Javascript object>