tf.lite.Interpreter
| Просмотреть исходный код на GitHub |
Интерфейс интерпретатора для моделей TensorFlow Lite.
tf.lite.Interpreter(
model_path=None, model_content=None, experimental_delegates=None,
num_threads=None
)
Это делает интерпретатор TensorFlow Lite доступным в Python. Возможно использование этого интерпретатора в многопотоковой среде Python, но необходимо убедиться, что функции конкретного экземпляра вызываются только из одного потока за раз. Таким образом, если вы хотите запустить 4 потока, выполняющих разные вычисления одновременно, создайте интерпретатор для каждого потока как локальную данные потока. Аналогично, если вы вызываете invoke() в одном потоке с одним интерпретатором, но хотите использовать tensor() в другом потоке после завершения, необходимо использовать синхронизирующие примитивы между потоками, чтобы убедиться, что invoke() вернул значение перед вызовом tensor().
| Аргументы | |
|---|---|
model_path | Путь к файлу TF-Lite Flatbuffer. |
model_content | Содержимое модели. |
experimental_delegates | Экспериментально. Подлежит изменению. Список объектов TfLiteDelegate, возвращаемых lite.load_delegate(). |
num_threads | Устанавливает количество потоков, используемых интерпретатором и доступных для ядер CPU. Если не установлено, интерпретатор будет использовать реализационно-зависимое значение по умолчанию. В настоящее время только подмножество ядер, таких как conv, поддерживает многопоточность. |
| Исключения | |
|---|---|
ValueError | Если интерпретатор не смог быть создан. |
Методы
allocate_tensors
allocate_tensors()
get_input_details
get_input_details()
Получение деталей входных данных модели.
| Возвращаемое значение | |
|---|---|
| Список деталей входных данных. |
get_output_details
get_output_details()
Получение деталей выходных данных модели.
| Возвращаемое значение | |
|---|---|
| Список деталей выходных данных. |
get_tensor
get_tensor(
tensor_index
)
Получение значения входного тензора (копия).
Если вы хотите избежать копирования, используйте tensor(). Эта функция не может использоваться для чтения промежуточных результатов.
| Аргументы | |
|---|---|
tensor_index | Индекс тензора, значение которого требуется получить. Это значение можно получить из поля 'index' в get_output_details. |
| Возвращаемое значение | |
|---|---|
| массив numpy. |
get_tensor_details
get_tensor_details()
Получение деталей тензора для каждого тензора с действительными деталями тензора.
Тензоры, для которых необходимая информация о тензоре не найдена, не добавляются в список. Это включает временные тензоры без имени.
| Возвращаемое значение | |
|---|---|
| Список словарей, содержащих информацию о тензоре. |
invoke
invoke()
Вызов интерпретатора.
Убедитесь, что заданы размеры входных данных, тензоры выделены и значения заполнены перед вызовом. Также обратите внимание, что эта функция освобождает GIL, чтобы тяжелые вычисления могли выполняться в фоновом режиме, пока интерпретатор Python продолжает работу. Никакие другие функции этого объекта не должны вызываться, пока вызов invoke() не завершится.
| Исключения | |
|---|---|
ValueError | При сбое в подлежащем интерпретаторе возникает ValueError. |
reset_all_variables
reset_all_variables()
resize_tensor_input
resize_tensor_input(
input_index, tensor_size, strict=False
)
Изменение размера входного тензора.
interpreter = Interpreter(model_content=tflite_model) interpreter.resize_tensor_input(0, [1, 224, 224, 3], strict=True) interpreter.allocate_tensors() interpreter.invoke()
| Аргументы | |
|---|---|
input_index | Индекс тензора входных данных для изменения размера. Это значение можно получить из поля 'index' в get_input_details. |
tensor_size | Форма tensor_shape для изменения размера входных данных. |
strict | Только неизвестные измерения могут быть изменены размером, когда strict равно True. Неизвестные измерения обозначаются как -1 в атрибуте shape_signature данного тензора. (по умолчанию False) |
| Исключения | |
|---|---|
ValueError | Если интерпретатор не смог изменить размер входного тензора. |
set_tensor
set_tensor(
tensor_index, value
)
Установка значения входного тензора.
Обратите внимание, что данные копируются в value.
Если вы хотите избежать копирования, используйте функцию tensor() для получения буфера numpy, указывающего на входной буфер в интерпретаторе tflite.
| Аргументы | |
|---|---|
tensor_index | Индекс тензора, значение которого требуется установить. Это значение можно получить из поля 'index' в get_input_details. |
value | Значение тензора для установки. |
| Исключения | |
|---|---|
ValueError | Если интерпретатор не смог установить тензор. |
tensor
tensor(
tensor_index
)
Возвращает функцию, которая предоставляет представление numpy текущего буфера тензора.
Это позволяет чтение и запись в эти тензоры без копирования. Это более точно отражает интерфейс метода tensor() класса C++ Interpreter, поэтому и название. Будьте внимательны, не удерживайте эти ссылки на выходные данные через вызовы allocate_tensors() и invoke(). Эта функция не может использоваться для чтения промежуточных результатов.
Использование:
interpreter.allocate_tensors()
input = interpreter.tensor(interpreter.get_input_details()[0]["index"])
output = interpreter.tensor(interpreter.get_output_details()[0]["index"])
for i in range(10):
input().fill(3.)
interpreter.invoke()
print("inference %s" % output())
Обратите внимание, как эта функция избегает непосредственного создания массива numpy. Это важно, чтобы не удерживать фактические представления numpy к данным дольше необходимого. В противном случае интерпретатор больше не может быть вызван, так как интерпретатор может изменить размер и сделать тензоры недействительными. API NumPy не допускает изменения базовых буферов.
НЕПРАВИЛЬНО:
input = interpreter.tensor(interpreter.get_input_details()[0]["index"])() output = interpreter.tensor(interpreter.get_output_details()[0]["index"])() interpreter.allocate_tensors() # This will throw RuntimeError for i in range(10): input.fill(3.) interpreter.invoke() # this will throw RuntimeError since input,output
| Аргументы | |
|---|---|
tensor_index | Индекс тензора, значение которого требуется получить. Это значение можно получить из поля 'index' в get_output_details. |
| Возвращаемое значение | |
|---|---|
| Функция, которая может вернуть новый массив numpy, указывающий на внутреннее состояние тензора TFLite в любой момент. Безопасно удерживать функцию навсегда, но не безопасно удерживать массив numpy навсегда. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/lite/Interpreter