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 | Устанавливает количество потоков, используемых интерпретатором и доступных для ядер процессора. Если не задано, интерпретатор будет использовать реализационно-зависимое значение по умолчанию. В настоящее время только подмножество ядер, таких как 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 | Размер тензора, на который необходимо изменить размер входного тензора. |
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 на данных дольше, чем необходимо. Если вы это сделаете, интерпретатор больше не сможет быть вызван, так как существует вероятность, что интерпретатор изменит размер и сделает тензоры недействительными. NumPy API не допускает никаких изменений в базовых буферах.
НЕПРАВИЛЬНО:
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.3/api_docs/python/tf/lite/Interpreter