TensorFlow Lite로 모델 추론을 구동하는 드라이버 클래스입니다.
참고: 아래 API 기능에 대한 자세한 내용은 InterpreterApi와 InterpreterFactory의 인스턴스를 만듭니다.
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);
}
셰이프 [] 와 셰이프[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로 변환할 때 입력 및 출력의 순서가 결정됩니다. 입력의 기본 모양과 마찬가지로
입력이 다차원 배열로 제공되면 해당 입력 텐서는
해당 배열의 모양에 따라 암시적으로 크기가 조정됩니다. 입력이 Buffer
로 제공되는 경우
암시적 크기 조절이 수행되지 않습니다. 호출자는 Buffer
바이트 크기가
해당 텐서의 값과 일치하거나 먼저 resizeInput(int, int[])
를 통해 텐서의 크기를 조절합니다. 텐서 형태 및 유형 정보는 getInputTensor(int)
및 getOutputTensor(int)
를 통해 제공되는 Tensor
클래스를 통해 얻을 수 있습니다.
경고:Interpreter
인스턴스는 스레드로부터 안전하지 않습니다. Interpreter
close()
를 호출하여 명시적으로 해제해야 하는 리소스를 소유합니다.
TFLite 라이브러리는 NDK API 19에 대해 빌드됩니다. Android API 수준 19 미만에서도 작동할 수 있지만 보장되지는 않습니다.
중첩된 클래스
클래스 | Interpreter.Options | 런타임 인터프리터 동작을 제어하기 위한 옵션 클래스입니다. |
공개 생성자
공개 메서드
void |
allocateTensors()
필요한 경우 모든 텐서의 할당을 명시적으로 업데이트합니다.
|
void |
close()
InterpreterApi 인스턴스와 연결된 리소스를 해제합니다. |
int | |
Tensor |
getInputTensor(int inputIndex)
제공된 입력 색인과 연결된 텐서를 가져옵니다.
|
int |
getInputTensorCount()
입력 텐서의 수를 가져옵니다.
|
Tensor |
getInputTensorFromSignature(String inputName, String signatureKey)
제공된 입력 이름 및 서명 메서드 이름과 연결된 텐서를 가져옵니다.
|
긴 버전 |
getLastNativeInferenceDurationNanoseconds()
네이티브 추론 타이밍을 반환합니다.
|
int | |
Tensor |
getOutputTensor(int outputIndex)
제공된 출력 색인과 연결된 텐서를 가져옵니다.
|
int |
getOutputTensorCount()
출력 텐서 수를 가져옵니다.
|
Tensor |
getOutputTensorFromSignature(String outputName, String signatureKey)
특정 서명 메서드에서 제공된 출력 이름과 연결된 텐서를 가져옵니다.
|
String[] | |
String[] |