Skip to content

Commit

Permalink
add tflite predictor
Browse files Browse the repository at this point in the history
  • Loading branch information
mzakharo committed Feb 12, 2023
1 parent 812654e commit 8c6e685
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 55 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*.h5 filter=lfs diff=lfs merge=lfs -text
*.tflite filter=lfs diff=lfs merge=lfs -text
51 changes: 15 additions & 36 deletions build_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
from tensorflow import keras
from tensorflow.keras import layers



TARGET = 'fc' #'orp'

TARGET = sys.argv[1] if len(sys.argv) == 2 else 'fc'

print(tf.__version__)
np.set_printoptions(precision=3, suppress=True)
Expand All @@ -34,7 +31,6 @@ def plot_loss(history):
vals= df[column].to_numpy()
c = float(column)
for i, v in enumerate(vals):
#print(v, c, labels[i])
vs.append((v, c, labels[i]))
dataset = pd.DataFrame(vs, columns= ('orp', 'ph', 'fc'))

Expand All @@ -50,31 +46,22 @@ def plot_loss(history):
print(train_dataset.describe().transpose()[['mean', 'std']])
#sns.pairplot(train_dataset, diag_kind='kde')

normalizer = tf.keras.layers.Normalization(axis=-1, input_shape=[2, ])
normalizer.adapt(np.array(train_features))
onorm = tf.keras.layers.Normalization(axis=-1)
inorm = tf.keras.layers.Normalization(axis=-1, input_shape=[2, ])
inorm.adapt(np.array(train_features))
onorm = tf.keras.layers.Normalization(axis=-1, invert=True)
onorm.adapt(train_labels)
#denorm = tf.keras.layers.Normalization(axis=-1, invert=True)
#denorm.adapt(train_labels)

train_labels = onorm(train_labels).numpy()[0]
test_labels = onorm(test_labels).numpy()[0]



opt = tf.keras.optimizers.Adam()
opt.weights = None
def build_and_compile_model(norm, onorm):
def build_and_compile_model(inorm, onorm):
model = keras.Sequential([
norm,
inorm,
layers.Dense(10, activation='relu'),
layers.Dense(10, activation='relu'),
layers.Dense(1),
# onorm,
onorm,
])
model.compile(loss='mean_squared_error', optimizer=opt)
model.compile(loss='mean_squared_error', optimizer='adam')
return model
model = build_and_compile_model(normalizer, onorm)
model = build_and_compile_model(inorm, onorm)
model.summary()
history = model.fit(
train_features,
Expand All @@ -91,17 +78,9 @@ def build_and_compile_model(norm, onorm):
plt.grid()
plt.show()


from tensorflow.python.keras.saving import hdf5_format
import h5py


# Save model
def save(model_path, model, omean, ovar):
with h5py.File(model_path, mode='w') as f:
hdf5_format.save_model_to_hdf5(model, f)
f.attrs['omean'] = omean
f.attrs['ovar'] = ovar


save(f'model_{TARGET}.h5', model, onorm.mean, onorm.variance)
model.save(f'model_{TARGET}.h5')
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open(f'model_{TARGET}.tflite', "wb") as f:
f.write(tflite_model)
print('done')
4 changes: 2 additions & 2 deletions model_fc.h5
Git LFS file not shown
3 changes: 3 additions & 0 deletions model_fc.tflite
Git LFS file not shown
4 changes: 2 additions & 2 deletions model_orp.h5
Git LFS file not shown
3 changes: 3 additions & 0 deletions model_orp.tflite
Git LFS file not shown
19 changes: 4 additions & 15 deletions predict.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,14 @@
#!/usr/bin/env python3
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
from tensorflow.python.keras.saving import hdf5_format
import keras
import h5py
import sys

def load(model_path):
# Load model
with h5py.File(model_path, mode='r') as f:
omean = f.attrs['omean']
ovar = f.attrs['ovar']
model = keras.models.load_model(f)
denorm = tf.keras.layers.Normalization(mean=omean, variance=ovar, invert=True)
return model, denorm

fmodel = sys.argv[1]
p0 = float(sys.argv[2])
p1 = float(sys.argv[3])
model, denorm = load(fmodel)
model = keras.models.load_model(fmodel, compile=False)
model.layers[-1].invert = True #Bug in Keras https://github.com/keras-team/keras/issues/17556

v = model.predict([(p0, p1)], verbose=0)[0]
print('output: ', denorm(v).numpy()[0])
v = model.predict([(p0, p1)], verbose=0)[0][0]
print('output: ', v)
20 changes: 20 additions & 0 deletions predict_tf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env python3
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
import numpy as np
import sys

fmodel = sys.argv[1]
p0 = float(sys.argv[2])
p1 = float(sys.argv[3])

interpreter = tf.lite.Interpreter(model_path=fmodel)
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.allocate_tensors()
input_data = np.array([[p0,p1]], dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
v = interpreter.get_tensor(output_details[0]['index'])[0][0]
print('output: ', v)

0 comments on commit 8c6e685

Please sign in to comment.