>source

간단한 tensorflow 분류 모델을 생성하여 .tflite 파일로 변환하여 내보냈습니다. 내 안드로이드 앱에 모델을 통합하기 위해 나는 이것을 따랐지만 추론부분에 대한 단일 입력/출력 모델 유형만 다루고 있습니다. 문서 및 기타 소스를 살펴본 후 다음 솔루션을 구현했습니다.

    //acc and gyro X, Y, Z are my features
        float[] accX= new float[1];
        float[] accY= new float[1];
        float[] accZ= new float[1];
        float[] gyroX= new float[1];
        float[] gyroY= new float[1];
        float[] gyroZ= new float[1];
        Object[] inputs= new Object[]{accX, accY, accZ, gyroX, gyroY, gyroZ};
        //And I have 4 classes
        float[] output1= new float[1];
        float[] output2= new float[1];
        float[] output3= new float[1];
        float[] output4= new float[1];
        Map<Integer, Object> outputs= new HashMap<>();
        outputs.put(0, output1);
        outputs.put(1, output2);
        outputs.put(2, output3);
        outputs.put(3, output4);
        interpreter.runForMultipleInputsOutputs(inputs, outputs);

하지만 이 code는 예외를 던집니다:

java.lang.IllegalArgumentException: 잘못된 입력 Tensor 인덱스: 1

이 단계에서는 무엇이 문제인지 잘 모르겠습니다.

제 모델의 아키텍처는 다음과 같습니다.

model= tf.keras.Sequential([
        tf.keras.layers.Dense(units=hp_units, input_shape=(6,), activation='relu'),
        tf.keras.layers.Dense(240, activation='relu'),
        tf.keras.layers.Dense(4, activation='softmax')
    ])

해결책:

@Karim Nosseir의 답변을 기반으로 서명 방법을 사용하여 내 모델의 입력 및 출력에 액세스했습니다. python으로 빌드된 모델이 있는 경우 답변과 같이 서명을 찾아 아래와 같이 사용할 수 있습니다.

파이썬 서명:

{'serving_default': {'inputs': ['dense_6_input'], 'outputs': ['dense_8']}}

Android 자바 사용:

    float[] input= new float[6];
        float[][] output= new float[1][4];
        //Run decoding signature.
        try (Interpreter interpreter= new Interpreter(loadModelFile())) {
            Map<String, Object> inputs= new HashMap<>();
            inputs.put("dense_6_input", input);
            Map<String, Object> outputs= new HashMap<>();
            outputs.put("dense_8", output);
            interpreter.runSignature(inputs, outputs, "serving_default");
        } catch (IOException e) {
            e.printStackTrace();
        }

  • 답변 # 1

    가장 쉬운 방법은 서명 API를 사용하고 입력/출력에 서명 이름을 사용하는 것입니다.

    v2 TFLite Converter를 사용한 경우 정의된 서명을 찾아야 합니다.

    아래에 정의된 서명을 인쇄하는 예

    model= tf.keras.Sequential([
            tf.keras.layers.Dense(4, input_shape=(6,), activation='relu'),
            tf.keras.layers.Dense(240, activation='relu'),
            tf.keras.layers.Dense(4, activation='softmax')
        ])
    converter= tf.lite.TFLiteConverter.from_keras_model(model)
    tflite_model= converter.convert()
    interpreter= tf.lite.Interpreter(model_content=tflite_model)
    print(interpreter.get_signature_list())
    

    가이드 보기 여기Java 및 기타 언어에서 실행하는 방법에 대해 설명합니다.

    답변 주셔서 감사합니다. 그것이 바로 제가 필요로 하는 것이었습니다.

    Ion2022-02-14 18:11:27
  • 이전 sql : BigQuery에서 레code 유형 열이 있는 두 테이블을 비교하는 방법
  • 다음 mask : p5.js로 마스킹 또는 클리핑 마스크