Интерпретатор в TensorFlow
Байтовый файл lite сам по себе
ещё не считает ответ. Его
загружают в класс
Interpreter, резервируют
память методом
allocate_tensors
и запускают проход методом
invoke.
Сначала соберём модель, переведём её в байты и создадим интерпретатор с выделением тензоров:
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(
1, input_shape=(2,)
),
])
model(tf.constant([[0.5, 1.0]]))
converter = (
tf.lite.TFLiteConverter.from_keras_model(
model
)
)
tflite_model = converter.convert()
interpreter = tf.lite.Interpreter(
model_content=tflite_model
)
interpreter.allocate_tensors()
print(len(interpreter.get_input_details()))
# выведет 1
Запишем вход, вызовем проход и прочитаем выходной тензор:
import numpy as np
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(
1, input_shape=(2,)
),
])
model(tf.constant([[0.5, 1.0]]))
converter = (
tf.lite.TFLiteConverter.from_keras_model(
model
)
)
tflite_model = converter.convert()
interpreter = tf.lite.Interpreter(
model_content=tflite_model
)
interpreter.allocate_tensors()
inp = interpreter.get_input_details()[0]
out = interpreter.get_output_details()[0]
interpreter.set_tensor(
inp["index"],
np.array([[0.5, 1.0]], dtype=np.float32),
)
interpreter.invoke()
answer = interpreter.get_tensor(out["index"])
print(answer.shape)
# выведет (1, 1)
Переведите маленькую двухвходовую цепочку в lite-буфер, откройте его в runtime и выделите память под тензоры. Выведите число входов по списку деталей.
Для модели с одним признаком
и одним ответом получите
байты, подготовьте runtime,
подайте строку [2.0]
и выполните проход.
Выведите форму выходного
массива.
Соберите сеть 3
признака на входе и 1
на выходе, переведите
её, запустите runtime с
нулевой строкой входа и
выведите форму результата
после прохода.