tf.lite.Interpreter
| Просмотреть исходный код на GitHub |
Интерфейс интерпретатора для моделей TensorFlow Lite.
tf.lite.Interpreter(
model_path=None, model_content=None, experimental_delegates=None
)
Это делает интерпретатор TensorFlow Lite доступным в Python. Возможна работа с этим интерпретатором в многопоточной среде Python, но вы должны убедиться, что функции определённого экземпляра вызываются только из одного потока за раз. Таким образом, если вы хотите иметь 4 потока, одновременно выполняющие различные выводы, создавайте интерпретатор для каждого из них как данные, локальные для потока. Аналогично, если вы вызываете invoke() в одном потоке на одном интерпретаторе, но хотите использовать tensor() в другом потоке после завершения, вы должны использовать синхронизирующее средство между потоками, чтобы убедиться, что invoke вернул значение до вызова tensor().
| Аргументы | |
|---|---|
model_path | Путь к файлу TF-Lite Flatbuffer. |
model_content | Содержание модели. |
experimental_delegates | Экспериментально. Подлежит изменению. Список объектов TfLiteDelegate, возвращаемых lite.load_delegate(). |
| Исключения | |
|---|---|
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
)
Изменяет размер входного тензора.
| Аргументы | |
|---|---|
input_index | Индекс тензора входного значения. Это значение можно получить из поля 'index' в get_input_details. |
tensor_size | tensor_shape для изменения размера входного значения. |
| Исключения | |
|---|---|
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/r1.15/api_docs/python/tf/lite/Interpreter