Класс драйвера для управления выводом модели с помощью TensorFlow Lite.
Примечание. Если вам не нужен доступ ни к одной из «экспериментальных» функций API, перечисленных ниже, предпочитайте использовать InterpreterApi и InterpreterFactory, а не использовать Interpreter напрямую.
Interpreter
инкапсулирует предварительно обученную модель TensorFlow Lite, в которой выполняются операции для вывода модели.
Например, если модель принимает только один вход и возвращает только один выход:
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.run(input, output);
}
Если модель принимает несколько входов или выходов:
Object[] inputs = {input0, input1, ...};
Map<Integer, Object> map_of_indices_to_outputs = new HashMap<>();
FloatBuffer ith_output = FloatBuffer.allocateDirect(3 * 2 * 4); // Float tensor, shape 3x2x4.
ith_output.order(ByteOrder.nativeOrder());
map_of_indices_to_outputs.put(i, ith_output);
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(inputs, map_of_indices_to_outputs);
}
Если модель принимает или создает струнные тензоры:
String[] input = {"foo", "bar"}; // Input tensor shape is [2].
String[][] output = new String[3][2]; // Output tensor shape is [3, 2].
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, output);
}
Обратите внимание, что существует различие между shape[] и shape[1]. Для выходных данных тензора скалярной строки:
String[] input = {"foo"}; // Input tensor shape is [1].
ByteBuffer outputBuffer = ByteBuffer.allocate(OUTPUT_BYTES_SIZE); // Output tensor shape is [].
try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, outputBuffer);
}
byte[] outputBytes = new byte[outputBuffer.remaining()];
outputBuffer.get(outputBytes);
// Below, the `charset` can be StandardCharsets.UTF_8.
String output = new String(outputBytes, charset);
Порядок входных и выходных данных определяется при преобразовании модели TensorFlow в модель TensorFlowLite с помощью Toco, как и формы входных данных по умолчанию.
Когда входные данные предоставляются в виде (многомерных) массивов, соответствующие входные тензоры будут неявно изменены в соответствии с формой этого массива. Когда входные данные предоставляются как типы Buffer
, неявное изменение размера не выполняется; вызывающая сторона должна убедиться, что размер байта Buffer
соответствует размеру соответствующего тензора, или сначала изменить размер тензора с помощью resizeInput(int, int[])
. Информацию о форме и типе тензора можно получить через класс Tensor
, доступный через getInputTensor(int)
и getOutputTensor(int)
.
ВНИМАНИЕ: Экземпляры Interpreter
не являются потокобезопасными. Interpreter
принадлежат ресурсы, которые необходимо явно освободить, вызвав функцию close()
Библиотека TFLite создана на основе NDK API 19. Она может работать для уровней Android API ниже 19, но это не гарантируется.
Вложенные классы
сорт | Интерпретатор.Опции | Класс опций для управления поведением интерпретатора во время выполнения. |
Публичные конструкторы
Интерпретатор (опции File modelFile, Interpreter.Options ) Инициализирует Interpreter и определяет параметры настройки поведения интерпретатора. | |
Интерпретатор ( ByteBuffer byteBuffer) Инициализирует Interpreter с помощью ByteBuffer файла модели. | |
Интерпретатор (опции ByteBuffer byteBuffer, Interpreter.Options ) Инициализирует Interpreter с помощью
|