알려진 간접 서브클래스 |
실험적 방법을 제외한 TensorFlow Lite 모델 인터프리터에 대한 인터페이스입니다.
InterpreterApi
인스턴스는 모델 추론을 위해 작업이 실행되는 사전 훈련된 TensorFlow Lite 모델을 캡슐화합니다.
예를 들어, 모델이 하나의 입력만 취하고 하나의 출력만 반환하는 경우:
try (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(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 (InterpreterApi interpreter =
new InterpreterApi.create(file_of_a_tensorflowlite_model)) {
interpreter.runForMultipleInputsOutputs(input, output);
}
입력 및 출력의 순서는 입력의 기본 모양과 마찬가지로 TensorFlow 모델을 Toco를 사용하여 TensorFlowLite 모델로 변환할 때 결정됩니다.
입력이 (다차원) 배열로 제공되면 해당 입력 텐서는 해당 배열의 모양에 따라 암시적으로 크기가 조정됩니다. 입력이 Buffer
유형으로 제공되면 암시적 크기 조정이 수행되지 않습니다. 호출자는 Buffer
바이트 크기가 해당 텐서의 크기와 일치하는지 또는 먼저 resizeInput(int, int[])
을 통해 텐서의 크기를 조정하는지 확인해야 합니다. 텐서 모양 및 유형 정보는 getInputTensor(int)
및 getOutputTensor(int)
) 를 통해 사용할 수 있는 Tensor
클래스를 통해 얻을 수 있습니다.
경고: InterpreterApi
인스턴스는 스레드로부터 안전 하지 않습니다 .
경고: InterpreterApi
인스턴스는 close()
를 호출하여 명시적으로 해제 해야 하는 리소스를 소유합니다.
TFLite 라이브러리는 NDK API 19에 대해 빌드되었습니다. 19 미만의 Android API 레벨에서 작동할 수 있지만 보장되지는 않습니다.
중첩 클래스
수업 | InterpreterApi.Options | 런타임 인터프리터 동작을 제어하기 위한 옵션 클래스입니다. |
공개 메서드
추상 공허 | 할당텐서 () 필요한 경우 모든 텐서에 대한 할당을 명시적으로 업데이트합니다. |
추상 공허 | 닫기 () InterpreterApi 인스턴스와 연결된 리소스를 해제합니다. |
정적 인터프리터Api | |
정적 인터프리터Api | 생성 ( ByteBuffer byteBuffer, InterpreterApi.Options 옵션) 지정된 모델 및 옵션을 사용하여 InterpreterApi 인스턴스를 생성합니다. |
추상 정수 | |
추상 텐서 | getInputTensor (int inputIndex) 제공된 입력 인덱스와 연결된 Tensor를 가져옵니다. |
추상 정수 | getInputTensorCount () 입력 텐서의 수를 가져옵니다. |
추상 긴 | getLastNativeInferenceDurationNanoseconds () 네이티브 추론 타이밍을 반환합니다. |
추상 정수 | |
추상 텐서 | getOutputTensor (int outputIndex) 제공된 출력 인덱스와 연결된 Tensor를 가져옵니다. |
추상 정수 | getOutputTensorCount () 출력 텐서의 수를 가져옵니다. |
추상 공허 | resizeInput (int idx, int[] dims, 부울 엄격) 기본 모델의 idx 번째 입력을 주어진 흐릿하게 조정합니다. |
추상 공허 | 크기 조정 입력(int idx , int[] 희미함) 기본 모델의 idx 번째 입력을 주어진 흐릿하게 조정합니다. |
추상 공허 | |
추상 공허 | runForMultipleInputsOutputs ( Object[] 입력, Map < Integer , Object > 출력) 모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다. |
상속된 메서드
공개 메서드
공개 추상 무효 할당텐서 ()
필요한 경우 모든 텐서에 대한 할당을 명시적으로 업데이트합니다.
이것은 주어진 입력 텐서 모양을 사용하여 종속 텐서에 대한 모양과 메모리 할당을 전파합니다.
참고: 이 호출은 *순전히 선택 사항*입니다. 입력 텐서의 크기가 조정된 경우 실행 중에 텐서 할당이 자동으로 발생합니다. 이 호출은 그래프를 실행하기 전에 출력 텐서의 모양을 결정하는 데 가장 유용합니다(예:
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...
).참고: 일부 그래프에는 동적으로 모양이 지정된 출력이 있으며, 이 경우 추론이 실행될 때까지 출력 모양이 완전히 전파되지 않을 수 있습니다.
던지다
불법 상태 예외 | 그래프의 텐서를 성공적으로 할당할 수 없는 경우. |
---|
공개 추상 무효 닫기 ()
InterpreterApi
인스턴스와 연결된 리소스를 해제합니다.
public static InterpreterApi 생성 ( 파일 modelFile, InterpreterApi.Options 옵션)
지정된 모델 및 옵션을 사용하여 InterpreterApi
인스턴스를 생성합니다. 모델은 파일에서 로드됩니다.
매개변수
모델파일 | 사전 훈련된 TF Lite 모델이 포함된 파일입니다. |
---|---|
옵션 | 인터프리터 동작을 사용자 지정하기 위한 옵션 집합입니다. |
던지다
IllegalArgumentException | modelFile 이 유효한 TensorFlow Lite 모델을 인코딩하지 않는 경우. |
---|
public static InterpreterApi 생성 ( ByteBuffer byteBuffer, InterpreterApi.Options 옵션)
지정된 모델 및 옵션을 사용하여 InterpreterApi
인스턴스를 생성합니다. 모델은 ByteBuffer
에서 읽습니다.
매개변수
바이트 버퍼 | 이진 직렬화 형식의 사전 훈련된 TF Lite 모델입니다. InterpreterApi 인스턴스를 생성한 후에는 ByteBuffer를 수정해서는 안 됩니다. ByteBuffer 는 모델 파일을 메모리 매핑하는 MappedByteBuffer 이거나 모델의 바이트 내용을 포함하는 nativeOrder()의 직접적인 ByteBuffer 일 수 있습니다. |
---|---|
옵션 | 인터프리터 동작을 사용자 지정하기 위한 옵션 집합입니다. |
던지다
IllegalArgumentException | byteBuffer 가 MappedByteBuffer 도 아니고 nativeOrder의 직접적인 ByteBuffer 도 아닌 경우. |
---|
공개 추상 int getInputIndex ( 문자열 opName)
입력의 작업 이름이 지정된 입력의 인덱스를 가져옵니다.
매개변수
작업 이름 |
---|
던지다
IllegalArgumentException | opName 이 인터프리터를 초기화하는 데 사용된 모델의 입력과 일치하지 않는 경우. |
---|
공개 추상 텐서 getInputTensor (int inputIndex)
제공된 입력 인덱스와 연결된 Tensor를 가져옵니다.
매개변수
입력 인덱스 |
---|
던지다
IllegalArgumentException | inputIndex 가 음수이거나 모델 입력 수보다 작지 않은 경우. |
---|
공개 추상 int getInputTensorCount ()
입력 텐서의 수를 가져옵니다.
공개 추상 긴 getLastNativeInferenceDurationNanoseconds ()
네이티브 추론 타이밍을 반환합니다.
던지다
IllegalArgumentException | 모델이 인터프리터에 의해 초기화되지 않은 경우. |
---|
공개 추상 int getOutputIndex ( 문자열 opName)
출력의 작업 이름이 주어지면 출력의 인덱스를 가져옵니다.
매개변수
작업 이름 |
---|
던지다
IllegalArgumentException | opName 이 인터프리터를 초기화하는 데 사용된 모델의 출력과 일치하지 않는 경우. |
---|
공개 추상 텐서 getOutputTensor (int outputIndex)
제공된 출력 인덱스와 연결된 Tensor를 가져옵니다.
참고: 출력 텐서 세부 정보(예: 모양)는 추론이 실행될 때까지 완전히 채워지지 않을 수 있습니다. 추론을 실행하기 *전에* 업데이트된 세부 정보가 필요한 경우(예: 출력 텐서 모양을 무효화할 수 있는 입력 텐서의 크기를 조정한 후) 할당 및 모양 전파를 명시적으로 트리거하기 위해 allocateTensors()
를 사용하십시오. 입력 *값*에 의존하는 출력 모양이 있는 그래프의 경우 추론을 실행할 때까지 출력 모양이 완전히 결정되지 않을 수 있습니다.
매개변수
출력 인덱스 |
---|
던지다
IllegalArgumentException | outputIndex 가 음수이거나 모델 출력 수보다 작지 않은 경우. |
---|
공개 추상 int getOutputTensorCount ()
출력 텐서의 수를 가져옵니다.
public abstract void resizeInput (int idx, int[] dims, boolean strict)
기본 모델의 idx 번째 입력을 주어진 흐릿하게 조정합니다.
'strict'가 True이면 알 수 없는 치수만 크기를 조정할 수 있습니다. 알 수 없는 차원은 `Tensor.shapeSignature()`에서 반환된 배열에서 `-1`로 표시됩니다.
매개변수
아이디 | |
---|---|
희미하다 | |
엄격한 |
던지다
IllegalArgumentException | idx 가 음수이거나 모델 입력 수보다 작지 않은 경우; 또는 idx 번째 입력의 크기를 조정할 때 오류가 발생하는 경우. 또한 'strict'가 True일 때 고정 차원으로 텐서의 크기를 조정하려고 하면 오류가 발생합니다. |
---|
공개 추상 무효 크기 조정 입력 (int idx, int[] dims)
기본 모델의 idx 번째 입력을 주어진 흐릿하게 조정합니다.
매개변수
아이디 | |
---|---|
희미하다 |
던지다
IllegalArgumentException | idx 가 음수이거나 모델 입력 수보다 작지 않은 경우; 또는 idx 번째 입력의 크기를 조정할 때 오류가 발생하는 경우. |
---|
public abstract void run ( 객체 입력, 객체 출력)
모델이 입력을 하나만 사용하고 출력을 하나만 제공하는 경우 모델 추론을 실행합니다.
경고: API는 Buffer
(직접이 선호되지만 필수는 아님)가 입력/출력 데이터 유형으로 사용되는 경우 더 효율적입니다. 더 나은 성능을 위해 Buffer
를 사용하여 기본 데이터를 공급하고 가져오는 것을 고려하십시오. 다음과 같은 구체적인 Buffer
유형이 지원됩니다.
-
ByteBuffer
- 기본 기본 Tensor 유형과 호환됩니다. -
FloatBuffer
- float Tensor와 호환됩니다. -
IntBuffer
- int32 Tensor와 호환됩니다. -
LongBuffer
- int64 Tensor와 호환됩니다.
Buffer
가 아닌 배열 또는 스칼라 입력으로만 지원됩니다. 매개변수
입력 | 배열 또는 다차원 배열 또는 int, float, long 및 byte를 포함한 기본 유형의 Buffer . Buffer 는 기본 유형에 대한 큰 입력 데이터를 전달하는 데 선호되는 방법인 반면 문자열 유형은 (다차원) 배열 입력 경로를 사용해야 합니다. Buffer 가 사용될 때, 그 내용은 모델 추론이 완료될 때까지 변경되지 않고 유지되어야 하며 호출자는 Buffer 가 적절한 읽기 위치에 있는지 확인해야 합니다. 호출자가 버퍼 핸들 interop를 허용하는 Delegate 를 사용하고 이러한 버퍼가 입력 Tensor 에 바인딩된 경우에만 null 값이 허용됩니다. |
---|---|
산출 | 출력 데이터의 다차원 배열 또는 int, float, long 및 byte를 포함한 기본 유형의 Buffer . Buffer 를 사용할 때 호출자는 버퍼가 적절한 쓰기 위치로 설정되어 있는지 확인해야 합니다. null 값이 허용되며 특정 경우에 유용합니다. 예를 들어 호출자가 버퍼 핸들 interop을 허용하는 Delegate 를 사용하고 이러한 버퍼가 출력 Tensor 에 바인딩된 경우( Interpreter.Options#setAllowBufferHandleOutput(boolean) 참조) ) 또는 그래프에 동적으로 모양이 지정된 출력이 있고 추론이 호출된 후 호출자가 출력 Tensor 모양을 쿼리해야 하는 경우 출력 텐서에서 직접 데이터를 Tensor.asReadOnlyBuffer() 를 통해). |
던지다
IllegalArgumentException | input 이 null이거나 비어 있거나 추론을 실행할 때 오류가 발생한 경우. |
---|---|
IllegalArgumentException | (실험적, 변경될 수 있음) 추론이 setCancelled(true) 에 의해 중단된 경우. |
public 추상 무효 runForMultipleInputsOutputs ( Object[] 입력, Map < Integer , Object > 출력)
모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.
경고: API는 Buffer
s(직접 선호되지만 필수는 아님)가 입력/출력 데이터 유형으로 사용되는 경우 더 효율적입니다. 더 나은 성능을 위해 Buffer
를 사용하여 기본 데이터를 공급하고 가져오는 것을 고려하십시오. 다음과 같은 구체적인 Buffer
유형이 지원됩니다.
-
ByteBuffer
- 기본 기본 Tensor 유형과 호환됩니다. -
FloatBuffer
- float Tensor와 호환됩니다. -
IntBuffer
- int32 Tensor와 호환됩니다. -
LongBuffer
- int64 Tensor와 호환됩니다.
Buffer
가 아닌 배열 또는 스칼라 입력으로만 지원됩니다. 참고: inputs
및 outputs
의 개별 요소에 대한 null
값은 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate
를 사용하고 이러한 버퍼가 해당 입력 또는 출력 Tensor
(들)에 바인딩된 경우에만 허용됩니다.
매개변수
입력 | 입력 데이터의 배열. 입력은 모델의 입력과 동일한 순서여야 합니다. 각 입력은 배열 또는 다차원 배열이거나 int, float, long 및 byte를 포함한 기본 유형의 Buffer 일 수 있습니다. Buffer 는 큰 입력 데이터를 전달하는 데 선호되는 방법인 반면 문자열 유형은 (다차원) 배열 입력 경로를 사용해야 합니다. Buffer 가 사용될 때, 그 내용은 모델 추론이 완료될 때까지 변경되지 않고 유지되어야 하고 호출자는 Buffer 가 적절한 읽기 위치에 있는지 확인해야 합니다. |
---|---|
출력 | 출력 인덱스를 출력 데이터의 다차원 배열 또는 int, float, long 및 byte를 포함한 기본 유형의 Buffer 에 매핑하는 맵입니다. 사용할 출력에 대한 항목만 유지하면 됩니다. Buffer 를 사용할 때 호출자는 버퍼가 적절한 쓰기 위치로 설정되어 있는지 확인해야 합니다. 출력 텐서 데이터에 버퍼 핸들이 사용되는 경우 또는 출력이 동적으로 형성되고 호출자가 추론이 호출된 후 출력 Tensor 모양을 쿼리하여 출력 텐서( Tensor.asReadOnlyBuffer() 를 통해). |
던지다
IllegalArgumentException | inputs 이 null이거나 비어 있는 경우, outputs 이 null인 경우 또는 추론을 실행할 때 오류가 발생한 경우. |
---|