Помогают защитить Большой Барьерный Риф с TensorFlow на Kaggle Присоединяйтесь вызов

Interpreter

общедоступный интерпретатор финального класса

Класс драйвера для вывода модели с помощью TensorFlow Lite.

Interpreter инкапсулирует предварительно обученную модель TensorFlow Lite, в которой выполняются операции для вывода модели.

Например, если модель принимает только один ввод и возвращает только один вывод:

try (Interpreter interpreter = new Interpreter(file_of_a_tensorflowlite_model)) {
   interpreter.run(input, output);
 
 }

Если модель принимает несколько входов или выходов:

Object[] inputs = {input0, input1, ...;
 Map 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);
 }
 }

Порядок входных и выходных данных определяется при преобразовании модели TensorFlow в модель TensorFlowLite с помощью Toco, как и формы входных данных по умолчанию.

Когда входные данные предоставляются в виде (многомерных) массивов, соответствующий входной тензор (ы) будет неявно изменен в соответствии с формой этого массива. Когда входные данные предоставляются как типы Buffer , неявное изменение размера не выполняется; вызывающий должен убедиться, что размер байта Buffer либо совпадает с размером соответствующего тензора, либо сначала изменить размер тензора с помощью resizeInput(int, int[]) . Информация о форме и типе Tensor getOutputTensor(int) может быть получена с помощью класса Tensor , доступного через getInputTensor(int) и getOutputTensor(int) .

ПРЕДУПРЕЖДЕНИЕ. Экземпляры Interpreter не являются потокобезопасными. Interpreter владеет ресурсами, которые должны быть явно освобождены с помощью вызова close()

Библиотека TFLite построена на основе NDK API 19. Она может работать для уровней API Android ниже 19, но не гарантируется.

Примечание. Этот класс не является потокобезопасным.

Вложенные классы

класс Устный переводчик. Класс параметров для управления поведением интерпретатора времени выполнения.

Общественные конструкторы

Интерпретатор (файл моделиFile)
Инициализирует Interpreter
Интерпретатор (файл моделиFile, int numThreads)
Этот конструктор устарел на уровне API. Предпочитайте использовать конструктор Interpreter(File, Options) . Этот метод будет удален в следующем выпуске.
Интерпретатор (параметры File modelFile, Interpreter.Options )
Инициализирует Interpreter и указывает количество потоков, используемых для вывода.
Интерпретатор (ByteBuffer byteBuffer)
Инициализирует Interpreter с помощью ByteBuffer файла модели.
Интерпретатор (ByteBuffer byteBuffer, int numThreads)
Этот конструктор устарел на уровне API. Предпочитайте использовать конструктор Interpreter(ByteBuffer, Options) . Этот метод будет удален в следующем выпуске.
Интерпретатор (MappedByteBuffer mappedByteBuffer)
Этот конструктор устарел на уровне API. Предпочитайте использовать конструктор Interpreter(ByteBuffer, Options) . Этот метод будет удален в следующем выпуске.
Интерпретатор (параметры ByteBuffer byteBuffer, Interpreter.Options )
Инициализирует Interpreter с помощью ByteBuffer файла модели и набора настраиваемых параметров Interpreter.Options .

Публичные методы

пустота
allocateTensors ()
При необходимости оперативно обновляет выделение для всех тензоров.
пустота
закрыть ()
Освободите ресурсы, связанные с Interpreter .
int
getInputIndex (строка opName)
Получает индекс ввода по имени операции ввода.
Тензор
getInputTensor (интервал inputIndex)
Получает тензор, связанный с проверенным входным индексом.
int
getInputTensorCount ()
Получает количество входных тензоров.
Тензор
getInputTensorFromSignature (String inputName, String methodName)
Получает тензор, связанный с предоставленным именем ввода и именем метода подписи.
Длинный
getLastNativeInferenceDurationNanoseconds ()
Возвращает собственное время вывода.
int
getOutputIndex (строка opName)
Получает индекс вывода по имени операции вывода.
Тензор
getOutputTensor (интервал outputIndex)
Получает тензор, связанный с указанным выходным индексом.
int
getOutputTensorCount ()
Получает количество выходных тензоров.
Тензор
getOutputTensorFromSignature (String outputName, String methodName)
Получает тензор, связанный с предоставленным выходным именем в конкретном методе подписи.
Нить[]
getSignatureDefNames ()
Получает список имен экспортированных методов SignatureDef, доступных в модели.
Нить[]
getSignatureInputs (String methodName)
Получает список входных данных SignatureDefs для метода methodName

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

Нить[]
getSignatureOutputs (String methodName)
Получает список выходных данных SignatureDefs для метода methodName

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

пустота
modifyGraphWithDelegate ( делегат- делегат)
Этот метод устарел на уровне API. Предпочитайте использовать addDelegate(Delegate) для предоставления делегатов во время создания. Этот метод будет удален в следующем выпуске.
пустота
resetVariableTensors ()
Дополнительно: сбрасывает все тензоры переменных до значения по умолчанию.
пустота
resizeInput (int idx, int [] dims, логическое строгое)
Изменяет размер входных данных idx нативной модели до заданных значений яркости.
пустота
resizeInput (int idx, int [] затемняет)
Изменяет размер входных данных idx нативной модели до заданных значений яркости.
пустота
run (ввод объекта, вывод объекта)
Выполняет вывод модели, если модель принимает только один вход и предоставляет только один выход.
пустота
runForMultipleInputsOutputs (входы Object [], выходы Map <Integer, Object>)
Выполняет вывод модели, если модель принимает несколько входных данных или возвращает несколько выходных данных.
пустота
runSignature (входы Map <String, Object>, выходы Map <String, Object>)
пустота
runSignature (входы Map <String, Object>, выходы Map <String, Object>, String имя_метода)
Выполняет вывод модели на основе SignatureDef, предоставленного через @code methodName.
пустота
setCancelled (логическое значение отменено)
Дополнительно: прерывает логический вывод в середине вызова run(Object, Object) .
пустота
setNumThreads (число int numThreads)
Этот метод устарел на уровне API. Предпочитайте использовать setNumThreads(int) напрямую для управления многопоточностью. Этот метод будет удален в следующем выпуске.

Унаследованные методы

Общественные конструкторы

общедоступный интерпретатор (файл модели)

Инициализирует Interpreter

Броски
IllegalArgumentException если modelFile не кодирует действительную модель TensorFlow Lite.

общедоступный интерпретатор (File modelFile, int numThreads)

Этот конструктор устарел на уровне API .
Предпочитайте использовать конструктор Interpreter(File, Options) . Этот метод будет удален в следующем выпуске.

Инициализирует Interpreter и указывает количество потоков, используемых для вывода.

общедоступный интерпретатор (параметры файла modelFile, Interpreter.Options )

Инициализирует Interpreter и указывает количество потоков, используемых для вывода.

Броски
IllegalArgumentException если modelFile не кодирует действительную модель TensorFlow Lite.

общедоступный интерпретатор (ByteBuffer byteBuffer)

Инициализирует Interpreter с помощью ByteBuffer файла модели.

ByteBuffer не следует изменять после создания Interpreter . ByteBuffer может быть либо MappedByteBuffer который отображает файл модели в памяти, либо прямым ByteBuffer функции nativeOrder (), который содержит байтовое содержимое модели.

Броски
IllegalArgumentException если byteBuffer не является MappedByteBuffer или прямой ERROR(/Bytebuffer) nativeOrder.

общедоступный интерпретатор (ByteBuffer byteBuffer, int numThreads)

Этот конструктор устарел на уровне API .
Предпочитайте использовать конструктор Interpreter(ByteBuffer, Options) . Этот метод будет удален в следующем выпуске.

Инициализирует Interpreter с помощью ByteBuffer файла модели и указывает количество потоков, используемых для вывода.

ByteBuffer не следует изменять после создания Interpreter . ByteBuffer может быть либо MappedByteBuffer который отображает файл модели в памяти, либо прямым ByteBuffer функции nativeOrder (), который содержит байтовое содержимое модели.

общедоступный интерпретатор (MappedByteBuffer mappedByteBuffer)

Этот конструктор устарел на уровне API .
Предпочитайте использовать конструктор Interpreter(ByteBuffer, Options) . Этот метод будет удален в следующем выпуске.

Инициализирует Interpreter с MappedByteBuffer для файла модели.

MappedByteBuffer должен оставаться неизменным после создания Interpreter .

общедоступный интерпретатор (параметры ByteBuffer byteBuffer, Interpreter.Options )

Инициализирует Interpreter с помощью ByteBuffer файла модели и набора настраиваемых параметров Interpreter.Options .

ByteBuffer не следует изменять после создания Interpreter . ByteBuffer может быть либо MappedByteBuffer который отображает файл модели в памяти, либо прямым ByteBuffer функции nativeOrder (), который содержит байтовое содержимое модели.

Броски
IllegalArgumentException если byteBuffer не является MappedByteBuffer или прямой ERROR(/Bytebuffer) nativeOrder.

Публичные методы

public void allocateTensors ()

При необходимости оперативно обновляет выделение для всех тензоров.

Это будет распространять формы и распределение памяти для всех зависимых тензоров с использованием заданных форм входного тензора.

Примечание. Этот вызов является * чисто необязательным *. Распределение тензоров будет происходить автоматически во время выполнения, если были изменены какие-либо входные тензоры. Этот вызов наиболее полезен при определении форм любых выходных тензоров перед выполнением графа, например,

interpreter.resizeInput(0, new int[]{1, 4, 4, 3));
 interpreter.allocateTensors();
 FloatBuffer input = FloatBuffer.allocate(interpreter.getInputTensor(0),numElements());
 // Populate inputs...
 FloatBuffer output = FloatBuffer.allocate(interpreter.getOutputTensor(0).numElements());
 interpreter.run(input, output)
 // Process outputs...
 }

Броски
IllegalStateException если не удалось разместить тензоры графа.

public void close ()

Освободите ресурсы, связанные с Interpreter .

public int getInputIndex (String opName)

Получает индекс ввода по имени операции ввода.

Броски
IllegalArgumentException если opName не соответствует ни одному входу в модели, используемой для инициализации Interpreter .

общедоступный тензор getInputTensor (int inputIndex)

Получает тензор, связанный с проверенным входным индексом.

Броски
IllegalArgumentException если inputIndex или не меньше количества входов модели.

общедоступный int getInputTensorCount ()

Получает количество входных тензоров.

общедоступный тензор getInputTensorFromSignature (String inputName, String methodName)

Получает тензор, связанный с предоставленным именем ввода и именем метода подписи.

Параметры
inputName Введите имя в подписи.
methodName Имя экспортированного метода, идентифицирующее SignatureDef, может иметь значение NULL, если модель имеет одну подпись.
Броски
IllegalArgumentException если inputName или methodName имеет значение null или пусто, либо указано недопустимое имя.

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

public Long getLastNativeInferenceDurationNanoseconds ()

Возвращает собственное время вывода.

Броски
IllegalArgumentException если модель не инициализирована Interpreter .

public int getOutputIndex (String opName)

Получает индекс вывода по имени операции вывода.

Броски
IllegalArgumentException если opName не соответствует никаким выходным данным в модели, используемой для инициализации Interpreter .

общедоступный тензор getOutputTensor (int outputIndex)

Получает тензор, связанный с указанным выходным индексом.

Примечание. Детали выходного тензора (например, форма) не могут быть полностью заполнены до тех пор, пока не будет выполнен вывод. Если вам нужны обновленные сведения * до * выполнения вывода (например, после изменения размера входного тензора, что может сделать недействительными формы выходного тензора), используйте allocateTensors() для явного запуска выделения и распространения формы. Обратите внимание, что для графиков с выходными формами, зависящими от входных * значений *, выходная форма не может быть полностью определена до выполнения логического вывода.

Броски
IllegalArgumentException если outputIndex или не меньше количества выходов модели.

общедоступный int getOutputTensorCount ()

Получает количество выходных тензоров.

общедоступный тензор getOutputTensorFromSignature (String outputName, String methodName)

Получает тензор, связанный с предоставленным выходным именем в конкретном методе подписи.

Примечание. Детали выходного тензора (например, форма) не могут быть полностью заполнены до тех пор, пока не будет выполнен вывод. Если вам нужны обновленные сведения * до * выполнения вывода (например, после изменения размера входного тензора, что может сделать недействительными формы выходного тензора), используйте allocateTensors() для явного запуска выделения и распространения формы. Обратите внимание, что для графиков с выходными формами, зависящими от входных * значений *, выходная форма не может быть полностью определена до выполнения логического вывода.

Параметры
outputName Вывести имя в подписи.
methodName Имя экспортированного метода, идентифицирующее SignatureDef, может иметь значение NULL, если модель имеет одну подпись.
Броски
IllegalArgumentException если outputName или methodName имеет значение null или пусто, либо указано недопустимое имя.

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

общедоступная строка [] getSignatureDefNames ()

Получает список имен экспортированных методов SignatureDef, доступных в модели.

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

public String [] getSignatureInputs (String methodName)

Получает список входных данных SignatureDefs для метода methodName

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

public String [] getSignatureOutputs (String methodName)

Получает список выходных данных SignatureDefs для метода methodName

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

public void modifyGraphWithDelegate ( делегат- делегат)

Этот метод устарел на уровне API .
Предпочитайте использовать addDelegate(Delegate) для предоставления делегатов во время создания. Этот метод будет удален в следующем выпуске.

Дополнительно: изменяет график с помощью предоставленного Delegate .

Броски
IllegalArgumentException если при изменении графика с delegate возникает ошибка.

public void resetVariableTensors ()

Дополнительно: сбрасывает все тензоры переменных до значения по умолчанию.

Если тензор переменной не имеет связанного буфера, он будет сброшен до нуля.

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

public void resizeInput (int idx, int [] dims, логическое строгое)

Изменяет размер входных данных idx нативной модели до заданных значений яркости.

Если для параметра strict установлено значение True, можно изменять размер только неизвестных размеров. Неизвестные размеры указываются как «-1» в массиве, возвращаемом «Tensor.shapeSignature ()«.

Броски
IllegalArgumentException если idx отрицательный или не меньше количества входов модели; или если ошибка возникает при изменении размера ввода idx. Кроме того, ошибка возникает при попытке изменить размер тензора с фиксированными размерами, когда struct имеет значение True.

public void resizeInput (int idx, int [] dims)

Изменяет размер входных данных idx нативной модели до заданных значений яркости.

Броски
IllegalArgumentException если idx отрицательный или не меньше количества входов модели; или если ошибка возникает при изменении размера ввода idx.

public void run (ввод объекта, вывод объекта)

Выполняет вывод модели, если модель принимает только один вход и предоставляет только один выход.

Предупреждение: API более эффективен, если Buffer (желательно прямой, но не обязательный) используется в качестве типа данных ввода / вывода. Для повышения производительности рассмотрите возможность использования Buffer для загрузки и извлечения примитивных данных. Следующие конкретные Buffer типы:

  • ByteBuffer - совместим с любым базовым примитивным типом Tensor.
  • FloatBuffer - совместим с FloatBuffer с плавающей запятой.
  • IntBuffer - совместим с тензорами int32.
  • LongBuffer - совместим с тензорами int64.
Обратите внимание, что логические типы поддерживаются только как массивы, но не Buffer , или как скалярные входные данные.

Параметры
Вход массив или многомерный массив, или Buffer примитивных типов, включая int, float, long и byte. Buffer является предпочтительным способом передачи больших входных данных для примитивных типов, тогда как строковые типы требуют использования входного пути (многомерного) массива. Когда используется Buffer , его содержимое должно оставаться неизменным до тех пор, пока не будет сделан вывод модели, и вызывающий должен убедиться, что Buffer находится в соответствующей позиции чтения. null значение допускается только в том случае, если вызывающий объект использует Delegate который разрешает взаимодействие дескрипторов буфера, и такой буфер был привязан к входному Tensor .
выход многомерный массив выходных данных или Buffer примитивных типов, включая int, float, long и byte. Когда используется Buffer , вызывающий должен убедиться, что он установлен в соответствующую позицию записи. Нулевое значение разрешено только в том случае, если вызывающий объект использует Delegate который разрешает взаимодействие дескрипторов буфера, и такой буфер был привязан к выходному Tensor . Смотрите setAllowBufferHandleOutput(boolean) .
Броски
IllegalArgumentException если input или output имеют значение NULL или пусто, или если при выполнении вывода возникает ошибка.
IllegalArgumentException (ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ, может быть изменена), если вывод прерывается setCancelled(true) .

public void runForMultipleInputsOutputs (входы Object [], выходы Map <Integer, Object>)

Выполняет вывод модели, если модель принимает несколько входных данных или возвращает несколько выходных данных.

Предупреждение: API более эффективен, если в качестве типов данных ввода / вывода используются Buffer (желательно прямые, но не обязательные). Для повышения производительности рассмотрите возможность использования Buffer для загрузки и извлечения примитивных данных. Следующие конкретные Buffer типы:

  • ByteBuffer - совместим с любым базовым примитивным типом Tensor.
  • FloatBuffer - совместим с FloatBuffer с плавающей запятой.
  • IntBuffer - совместим с тензорами int32.
  • LongBuffer - совместим с тензорами int64.
Обратите внимание, что логические типы поддерживаются только как массивы, но не Buffer , или как скалярные входные данные.

Примечание: null значения для invididual элементов inputs и outputs допускается только , если вызывающий абонент использует Delegate , который позволяет буфера ручки Interop, и такой буфер был связан с соответствующим входом или выходом Tensor (ов).

Параметры
входы массив входных данных. Входные данные должны быть в том же порядке, что и входные данные модели. Каждый ввод может быть массивом или многомерным массивом или Buffer примитивных типов, включая int, float, long и byte. Buffer является предпочтительным способом передачи больших входных данных, тогда как строковые типы требуют использования входного пути (многомерного) массива. Когда используется Buffer , его содержимое должно оставаться неизменным до тех пор, пока не будет сделан вывод модели, и вызывающий должен убедиться, что Buffer находится в соответствующей позиции чтения.
выходы отображение индексов вывода на многомерные массивы выходных данных или Buffer примитивных типов, включая int, float, long и byte. Для использования выходов необходимо только сохранить записи. Когда используется Buffer , вызывающий должен убедиться, что он установлен в соответствующую позицию записи.
Броски
IllegalArgumentException если inputs или outputs равны нулю или пусто, или если при выполнении вывода возникает ошибка.

public void runSignature (входы Map <String, Object>, выходы Map <String, Object>)

public void runSignature (входы Map <String, Object>, выходы Map <String, Object>, String methodName)

Выполняет вывод модели на основе SignatureDef, предоставленного через @code methodName.

См. run(Object, Object) для получения дополнительных сведений о разрешенных типах входных и выходных данных.

Параметры
входы Карта входов от имени входа в signatureDef до объекта ввода.
выходы отображение сопоставления выходного имени в SignatureDef с выходными данными.
methodName Имя экспортированного метода, идентифицирующее SignatureDef.
Броски
IllegalArgumentException если inputs или outputs или methodName имеет значение null или пусто, или если при выполнении вывода возникает ошибка.

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

public void setCancelled (логическое значение отменено)

Дополнительно: прерывает логический вывод в середине вызова run(Object, Object) .

Флаг отмены будет установлен в значение true при вызове этой функции. Интерпретатор будет проверять флаг между вызовами Op, и если это true , интерпретатор остановит выполнение. Интерпретатор будет оставаться в отмененном состоянии до тех пор, пока явно не будет "отменен" с помощью setCancelled(false) .

ВНИМАНИЕ! Это экспериментальный API, который может быть изменен.

Параметры
отменен true чтобы отменить вывод наилучшим образом; false для возобновления.
Броски
IllegalStateException если интерпретатор не инициализирован с опцией отмены, которая по умолчанию отключена.

public void setNumThreads (int numThreads)

Этот метод устарел на уровне API .
Предпочитайте использовать setNumThreads(int) напрямую для управления многопоточностью. Этот метод будет удален в следующем выпуске.

Устанавливает количество потоков, которые будут использоваться для операций, поддерживающих многопоточность.