Interpreter

공개 최종 수업 통역사

TensorFlow Lite를 사용하여 모델 추론을 구동하는 드라이버 클래스입니다.

참고: 아래의 "실험적" API 기능에 액세스할 필요가 없다면 Interpreter를 직접 사용하는 것보다 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);
 

입력 및 출력의 순서는 입력의 기본 모양과 마찬가지로 Toco를 사용하여 TensorFlow 모델을 TensorFlowLite 모델로 변환할 때 결정됩니다.

입력이 (다차원) 배열로 제공되면 해당 입력 텐서(들)는 해당 배열의 모양에 따라 암시적으로 크기가 조정됩니다. 입력이 Buffer 유형으로 제공되면 암시적 크기 조정이 수행되지 않습니다. 호출자는 Buffer 바이트 크기가 해당 텐서의 크기와 일치하는지 또는 먼저 resizeInput(int, int[]) 통해 텐서의 크기를 조정하는지 확인해야 합니다. Tensor 형태 및 유형 정보는 getInputTensor(int)getOutputTensor(int) 통해 사용 가능한 Tensor 클래스를 통해 얻을 수 있습니다.

경고: Interpreter 인스턴스는 스레드로부터 안전 하지 않습니다 . Interpreter close() 호출하여 명시적으로 해제 해야 하는 리소스를 소유합니다.

TFLite 라이브러리는 NDK API 19를 기반으로 구축되었습니다. 19 미만의 Android API 레벨에서 작동할 수 있지만 보장되지는 않습니다.

중첩 클래스

수업 통역사.옵션 런타임 인터프리터 동작을 제어하기 위한 옵션 클래스입니다.

공공 생성자

통역사 ( 파일 모델파일)
Interpreter 초기화합니다.
통역사 ( 파일 모델파일, Interpreter.Options 옵션)
Interpreter 초기화하고 인터프리터 동작을 사용자 정의하기 위한 옵션을 지정합니다.
인터프리터 ( ByteBuffer byteBuffer)
모델 파일의 ByteBufferInterpreter 를 초기화합니다.
인터프리터 ( ByteBuffer byteBuffer, Interpreter.Options 옵션)
모델 파일의 ByteBuffer 와 사용자 정의 Interpreter.Options 세트를 사용하여 Interpreter 초기화합니다.

공개 방법

무효의
할당텐서 ()
필요한 경우 모든 텐서에 대한 할당을 명시적으로 업데이트합니다.
무효의
닫다 ()
InterpreterApi 인스턴스와 연결된 리소스를 해제합니다.
정수
getInputIndex ( 문자열 opName)
입력의 작업 이름이 주어지면 입력의 인덱스를 가져옵니다.
텐서
getInputTensor (int inputIndex)
제공된 입력 인덱스와 연결된 Tensor를 가져옵니다.
정수
getInputTensorCount ()
입력 텐서의 수를 가져옵니다.
텐서
getInputTensorFromSignature ( 문자열 inputName, 문자열 서명키)
제공된 입력 이름 및 서명 방법 이름과 연결된 Tensor를 가져옵니다.
getLastNativeInferenceDurationNanoseconds ()
기본 추론 타이밍을 반환합니다.
정수
getOutputIndex ( 문자열 opName)
출력의 작업 이름이 지정된 출력의 인덱스를 가져옵니다.
텐서
getOutputTensor (int 출력 인덱스)
제공된 출력 인덱스와 연결된 Tensor를 가져옵니다.
정수
getOutputTensorCount ()
출력 Tensor의 수를 가져옵니다.
텐서
getOutputTensorFromSignature ( 문자열 출력 이름, 문자열 서명키)
특정 서명 방법으로 제공된 출력 이름과 연결된 Tensor를 가져옵니다.
끈[]
getSignatureInputs ( 문자열 서명키)
signatureKey 메서드에 대한 SignatureDefs 입력 목록을 가져옵니다.
끈[]
getSignatureKeys ()
모델에서 사용할 수 있는 SignatureDef 내보낸 메서드 이름 목록을 가져옵니다.
끈[]
getSignatureOutputs ( 문자열 서명키)
signatureKey 메서드에 대한 SignatureDefs 출력 목록을 가져옵니다.
무효의
재설정변수텐서 ()
고급: 모든 변수 텐서를 기본값으로 재설정합니다.
무효의
resizeInput (int idx, int[] 희미함, 부울 엄격함)
기본 모델의 idx번째 입력 크기를 지정된 치수로 조정합니다.
무효의
resizeInput (int idx, int[] 희미함)
기본 모델의 idx번째 입력 크기를 지정된 치수로 조정합니다.
무효의
실행 ( 객체 입력, 객체 출력)
모델이 하나의 입력만 취하고 하나의 출력만 제공하는 경우 모델 추론을 실행합니다.
무효의
runForMultipleInputsOutputs ( Object[] 입력, Map < Integer , Object > 출력)
모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.
무효의
runSignature ( Map < String , Object > 입력, Map < String , Object > 출력)
runSignature(Map, Map, String) 과 동일하지만 모델에 하나의 SignatureDef가 있다고 가정하면 SignatureKey를 전달할 필요가 없습니다.
무효의
runSignature ( Map < String , Object > 입력, Map < String , Object > 출력, String SignatureKey)
signatureKey 통해 제공되는 SignatureDef를 기반으로 모델 추론을 실행합니다.
무효의
setCancelled (부울 취소됨)
고급: run(Object, Object) 호출 중에 추론을 중단합니다.

상속된 메서드

공공 생성자

공용 통역사 ( 파일 모델파일)

Interpreter 초기화합니다.

매개변수
모델파일 사전 학습된 TF Lite 모델의 파일입니다.
던지기
IllegalArgumentException modelFile 유효한 TensorFlow Lite 모델을 인코딩하지 않는 경우.

공용 인터프리터 ( 파일 모델파일, Interpreter.Options 옵션)

Interpreter 초기화하고 인터프리터 동작을 사용자 정의하기 위한 옵션을 지정합니다.

매개변수
모델파일 사전 학습된 TF Lite 모델의 파일
옵션 인터프리터 동작을 사용자 정의하기 위한 옵션 세트
던지기
IllegalArgumentException modelFile 유효한 TensorFlow Lite 모델을 인코딩하지 않는 경우.

공용 인터프리터 ( ByteBuffer byteBuffer)

모델 파일의 ByteBufferInterpreter 를 초기화합니다.

Interpreter 생성 후에는 ByteBuffer를 수정하면 안 됩니다. ByteBuffer 모델 파일을 메모리 매핑하는 MappedByteBuffer 이거나 모델의 바이트 내용을 포함하는 NativeOrder()의 직접 ByteBuffer 일 수 있습니다.

매개변수
바이트버퍼
던지기
IllegalArgumentException byteBuffer MappedByteBuffer 도 아니고 NativeOrder의 직접 ByteBuffer 도 아닌 경우.

공용 인터프리터 ( ByteBuffer byteBuffer, Interpreter.Options 옵션)

모델 파일의 ByteBuffer 와 사용자 정의 Interpreter.Options 세트를 사용하여 Interpreter 초기화합니다.

Interpreter 생성 후에는 ByteBuffer 수정하면 안 됩니다. ByteBuffer 모델 파일을 메모리 매핑하는 MappedByteBuffer 이거나 모델의 바이트 내용을 포함하는 NativeOrder()의 직접 ByteBuffer 일 수 있습니다.

매개변수
바이트버퍼
옵션
던지기
IllegalArgumentException byteBuffer MappedByteBuffer 도 아니고 NativeOrder의 직접 ByteBuffer 도 아닌 경우.

공개 방법

공개 무효 할당Tensors ()

필요한 경우 모든 텐서에 대한 할당을 명시적으로 업데이트합니다.

이는 주어진 입력 텐서 형태를 사용하여 종속 텐서에 대한 형태와 메모리 할당을 전파합니다.

참고: 이 호출은 *순전히 선택 사항*입니다. 입력 텐서의 크기가 조정된 경우 실행 중에 텐서 할당이 자동으로 발생합니다. 이 호출은 그래프를 실행하기 전에 출력 텐서의 모양을 결정하는 데 가장 유용합니다(예:

 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 인스턴스와 연결된 리소스를 해제합니다.

공개 int getInputIndex ( 문자열 opName)

입력의 작업 이름이 주어지면 입력의 인덱스를 가져옵니다.

매개변수
opName

공개 텐서 getInputTensor (int inputIndex)

제공된 입력 인덱스와 연결된 Tensor를 가져옵니다.

매개변수
입력 인덱스

공개 int getInputTensorCount ()

입력 텐서의 수를 가져옵니다.

공개 텐서 getInputTensorFromSignature ( 문자열 inputName, 문자열 시그니처키)

제공된 입력 이름 및 서명 방법 이름과 연결된 Tensor를 가져옵니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
입력 이름 서명에 이름을 입력하세요.
서명키 SignatureDef를 식별하는 서명 키는 모델에 서명이 하나 있는 경우 null일 수 있습니다.
던지기
IllegalArgumentException inputName 또는 signatureKey 가 null이거나 비어 있거나 잘못된 이름이 제공된 경우입니다.

공개 getLastNativeInferenceDurationNanoseconds ()

기본 추론 타이밍을 반환합니다.

공개 int getOutputIndex ( 문자열 opName)

출력의 작업 이름이 지정된 출력의 인덱스를 가져옵니다.

매개변수
opName

공개 텐서 getOutputTensor (int 출력 인덱스)

제공된 출력 인덱스와 연결된 Tensor를 가져옵니다.

참고: 출력 텐서 세부정보(예: 모양)는 추론이 실행될 때까지 완전히 채워지지 않을 수 있습니다. 추론을 실행하기 *전에* 업데이트된 세부 정보가 필요한 경우(예: 출력 텐서 형태를 무효화할 수 있는 입력 텐서의 크기를 조정한 후), 할당 및 형태 전파를 명시적으로 트리거하려면 allocateTensors() 사용하세요. 입력 *값*에 따라 달라지는 출력 모양이 있는 그래프의 경우 추론을 실행할 때까지 출력 모양이 완전히 결정되지 않을 수 있습니다.

매개변수
출력 인덱스

공개 int getOutputTensorCount ()

출력 Tensor의 수를 가져옵니다.

공개 텐서 getOutputTensorFromSignature ( 문자열 출력 이름, 문자열 서명 키)

특정 서명 방법으로 제공된 출력 이름과 연결된 Tensor를 가져옵니다.

참고: 출력 텐서 세부정보(예: 모양)는 추론이 실행될 때까지 완전히 채워지지 않을 수 있습니다. 추론을 실행하기 *전에* 업데이트된 세부 정보가 필요한 경우(예: 출력 텐서 형태를 무효화할 수 있는 입력 텐서의 크기를 조정한 후), 할당 및 형태 전파를 명시적으로 트리거하려면 allocateTensors() 사용하세요. 입력 *값*에 따라 달라지는 출력 모양이 있는 그래프의 경우 추론을 실행할 때까지 출력 모양이 완전히 결정되지 않을 수 있습니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
출력 이름 서명의 출력 이름입니다.
서명키 SignatureDef를 식별하는 서명 키는 모델에 서명이 하나 있는 경우 null일 수 있습니다.
던지기
IllegalArgumentException outputName 또는 signatureKey 가 null이거나 비어 있거나 잘못된 이름이 제공된 경우입니다.

공개 문자열[] getSignatureInputs ( 문자열 서명키)

signatureKey 메서드에 대한 SignatureDefs 입력 목록을 가져옵니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
서명키

공개 문자열[] getSignatureKeys ()

모델에서 사용할 수 있는 SignatureDef 내보낸 메서드 이름 목록을 가져옵니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

공개 문자열[] getSignatureOutputs ( 문자열 서명키)

signatureKey 메서드에 대한 SignatureDefs 출력 목록을 가져옵니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
서명키

공개 무효 재설정VariableTensors ()

고급: 모든 변수 텐서를 기본값으로 재설정합니다.

변수 텐서에 연결된 버퍼가 없으면 0으로 재설정됩니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

공개 무효 resizeInput (int idx, int[] 희미함, 부울 엄격함)

기본 모델의 idx번째 입력 크기를 지정된 치수로 조정합니다.

`strict`가 True인 경우 알 수 없는 크기만 크기를 조정할 수 있습니다. 알 수 없는 차원은 `Tensor.shapeSignature()`에 의해 반환된 배열에 `-1`로 표시됩니다.

매개변수
idx
어두워지다
엄격한

공개 무효 resizeInput (int idx, int[] 희미함)

기본 모델의 idx번째 입력 크기를 지정된 치수로 조정합니다.

매개변수
idx
어두워지다

public void run ( 객체 입력, 객체 출력)

모델이 하나의 입력만 취하고 하나의 출력만 제공하는 경우 모델 추론을 실행합니다.

경고: Buffer (직접 선호하지만 필수는 아님)가 입력/출력 데이터 유형으로 사용되는 경우 API가 더 효율적입니다. 더 나은 성능을 위해 Buffer 사용하여 기본 데이터를 공급하고 가져오는 것을 고려해 보십시오. 다음과 같은 구체적인 Buffer 유형이 지원됩니다.

  • ByteBuffer - 기본 기본 Tensor 유형과 호환됩니다.
  • FloatBuffer - 부동 텐서와 호환됩니다.
  • IntBuffer - int32 Tensor와 호환됩니다.
  • LongBuffer - int64 Tensor와 호환됩니다.
부울 유형은 Buffer 가 아닌 배열이나 스칼라 입력으로만 지원됩니다.

매개변수
입력 배열 또는 다차원 배열 또는 int, float, long 및 byte를 포함한 기본 유형의 Buffer . Buffer 기본 유형의 경우 큰 입력 데이터를 전달하는 데 선호되는 방법인 반면, 문자열 유형은 (다차원) 배열 입력 경로를 사용해야 합니다. Buffer 사용되면 모델 추론이 완료될 때까지 해당 내용이 변경되지 않고 유지되어야 하며 호출자는 Buffer 적절한 읽기 위치에 있는지 확인해야 합니다. 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate 사용하고 해당 버퍼가 입력 Tensor 에 바인딩된 경우에만 null 값이 허용됩니다.
산출 출력 데이터의 다차원 배열 또는 int, float, long 및 byte를 포함한 기본 유형의 Buffer . Buffer 사용되는 경우 호출자는 버퍼가 적절한 쓰기 위치로 설정되었는지 확인해야 합니다. null 값은 허용되며 특정 경우에 유용합니다. 예를 들어 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate 사용하고 해당 버퍼가 출력 Tensor 에 바인딩된 경우( Interpreter.Options#setAllowBufferHandleOutput(boolean) 도 참조하세요. ) 또는 그래프에 동적으로 모양이 지정된 출력이 있고 호출자가 추론이 호출된 후 출력 Tensor 모양을 쿼리해야 하는 경우 ( Tensor.asReadOnlyBuffer() 를 통해) 출력 텐서에서 직접 데이터를 가져옵니다.

공공 무효 runForMultipleInputsOutputs ( Object[] 입력, Map < Integer , Object > 출력)

모델이 여러 입력을 사용하거나 여러 출력을 반환하는 경우 모델 추론을 실행합니다.

경고: Buffer s(직접 선호하지만 필수는 아님)가 입력/출력 데이터 유형으로 사용되는 경우 API가 더 효율적입니다. 더 나은 성능을 위해 Buffer 사용하여 기본 데이터를 공급하고 가져오는 것을 고려해 보십시오. 다음과 같은 구체적인 Buffer 유형이 지원됩니다.

  • ByteBuffer - 기본 기본 Tensor 유형과 호환됩니다.
  • FloatBuffer - 부동 텐서와 호환됩니다.
  • IntBuffer - int32 Tensor와 호환됩니다.
  • LongBuffer - int64 Tensor와 호환됩니다.
부울 유형은 Buffer 가 아닌 배열이나 스칼라 입력으로만 지원됩니다.

참고: inputsoutputs 의 개별 요소에 대한 null 값은 호출자가 버퍼 핸들 상호 운용성을 허용하는 Delegate 사용하고 그러한 버퍼가 해당 입력 또는 출력 Tensor (들)에 바인딩된 경우에만 허용됩니다.

매개변수
입력 입력 데이터의 배열. 입력은 모델의 입력과 동일한 순서로 되어 있어야 합니다. 각 입력은 배열 또는 다차원 배열이거나 int, float, long 및 byte를 포함한 기본 유형의 Buffer 일 수 있습니다. Buffer 큰 입력 데이터를 전달하는 데 선호되는 방법인 반면, 문자열 유형은 (다차원) 배열 입력 경로를 사용해야 합니다. Buffer 사용하는 경우 모델 추론이 완료될 때까지 해당 내용이 변경되지 않고 유지되어야 하며 호출자는 Buffer 적절한 읽기 위치에 있는지 확인해야 합니다.
출력 출력 인덱스를 출력 데이터의 다차원 배열 또는 int, float, long 및 byte를 포함한 기본 유형의 Buffer 에 매핑하는 맵입니다. 사용할 출력에 대한 항목만 유지하면 됩니다. Buffer 사용되는 경우 호출자는 버퍼가 적절한 쓰기 위치로 설정되었는지 확인해야 합니다. 버퍼 핸들이 출력 텐서 데이터에 사용되는 경우 또는 출력이 동적으로 형성되고 호출자가 추론이 호출된 후 출력 Tensor 형태를 쿼리하여 출력 텐서에서 직접 데이터를 가져와야 하는 경우 맵은 비어 있을 수 있습니다( Tensor.asReadOnlyBuffer() 통해).

public void runSignature ( Map < String , Object > 입력, Map < String , Object > 출력)

runSignature(Map, Map, String) 과 동일하지만 모델에 하나의 SignatureDef가 있다고 가정하면 SignatureKey를 전달할 필요가 없습니다. 모델에 SignatureDef가 두 개 이상 있으면 예외가 발생합니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
입력
출력

public void runSignature ( Map < String , Object > 입력, Map < String , Object > 출력, String SignatureKey)

signatureKey 통해 제공되는 SignatureDef를 기반으로 모델 추론을 실행합니다.

허용되는 입력 및 출력 데이터 유형에 대한 자세한 내용은 run(Object, Object) 참조하세요.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
입력 SignatureDef의 입력 이름에서 입력 개체로의 매핑입니다.
출력 SignatureDef의 출력 이름에서 출력 데이터로의 매핑입니다. 호출자가 추론 후 직접 Tensor 데이터를 쿼리하려는 경우(예: 출력 형태가 동적이거나 출력 버퍼 핸들이 사용되는 경우) 비어 있을 수 있습니다.
서명키 SignatureDef를 식별하는 서명 키입니다.
던지기
IllegalArgumentException inputs null이거나 비어 있는 경우, outputs 또는 signatureKey null인 경우 또는 추론을 실행할 때 오류가 발생하는 경우.

public void setCancelled (부울 취소됨)

고급: run(Object, Object) 호출 중에 추론을 중단합니다.

이 함수가 호출되면 취소 플래그가 true로 설정됩니다. 인터프리터는 Op 호출 사이의 플래그를 확인하고, 이것이 true 이면 인터프리터는 실행을 중지합니다. 인터프리터는 setCancelled(false) 에 의해 명시적으로 "취소 취소"될 때까지 취소된 상태로 유지됩니다.

경고: 이는 실험적인 API이며 변경될 수 있습니다.

매개변수
취소 된 최선의 방법으로 추론을 취소하려면 true 이고, 그렇지 않으면 false입니다. 재개하려면 false .
던지기
IllegalStateException 기본적으로 꺼져 있는 취소 가능 옵션을 사용하여 인터프리터가 초기화되지 않은 경우.