Как передать несколько входных данных модели TFlite в интерпретаторе Python

#python #tensorflow #quantization #tensorflow-lite

#python #tensorflow #квантование #тензорный поток-облегченный

Вопрос:

Как вы можете передать 2 входных данных в модели tflite.

Я построил модель tf => преобразовать в tflite

 text = tf.keras.Input((64), name="text")
intent = tf.keras.Input(shape=(25,), name="intent")

layer = tf.keras.layers.Embedding(dataset.vocab_size, 128, name="embedding_layer")(text)
layer = tf.keras.layers.LocallyConnected1D(256, kernel_size=1, strides=1, padding="valid", activation="relu")(layer)
layer = tf.keras.layers.SpatialDropout1D(0.1)(layer)
layer = tf.keras.layers.GlobalAveragePooling1D()(layer)
layer = tf.keras.layers.Dense(512, activation="relu")(layer)
layer = tf.keras.layers.Dropout(0.1)(layer)

layer = tf.keras.layers.concatenate([layer, intent])

output_layer = tf.keras.layers.Dense(units=dataset.max_labels, activation="softmax")(layer)

model = tf.keras.models.Model(inputs=[text, intent], outputs=[output_layer])
 

Моя модель имеет 2 входа.

 interpreter.get_input_details():
[{'name': 'text',
  'index': 0,
  'shape': array([ 1, 64], dtype=int32),
  'shape_signature': array([ 1, 64], dtype=int32),
  'dtype': numpy.float32,
  'quantization': (0.0, 0),
  'quantization_parameters': {'scales': array([], dtype=float32),
   'zero_points': array([], dtype=int32),
   'quantized_dimension': 0},
  'sparsity_parameters': {}},
 {'name': 'intent',
  'index': 1,
  'shape': array([ 1, 32], dtype=int32),
  'shape_signature': array([ 1, 32], dtype=int32),
  'dtype': numpy.float32,
  'quantization': (0.0, 0),
  'quantization_parameters': {'scales': array([], dtype=float32),
   'zero_points': array([], dtype=int32),
   'quantized_dimension': 0},
  'sparsity_parameters': {}}]
 

Как я могу передать свою модель tflite с 2 входами?
Используя set_tensor, мы можем передать только 1 вход…

 interpreter.set_tensor(interpreter.get_input_details()[0]['index'], input_text)
 

я хочу что-то вроде

 interpreter.set_tensor([interpreter.get_input_details()[0]['index'], interpreter.get_input_details()[1]['index']], [input_text, input_intent])
 

Спасибо, ребята = D

Комментарии:

1. Я ответил на ваш вопрос или что-то осталось неясным?

Ответ №1:

Используйте этот поток:

  1. Получите список параметров ваших входных данных: input_details = interpreter.get_input_details()
  2. Определите соответствующие индексы для ваших данных с помощью сопоставления типа / формы из input_details
  3. Установите свои тензоры в соответствии с входными данными:

    interpreter.set_tensor(input_details[0]['index'], input_text)
    interpreter.set_tensor(input_details[1]['index'], input_intent)

  4. Вызовите свою модель interpreter.invoke()

Подробности: Загрузите и запустите модель на Python

Ответ №2:

вы можете реализовать и протестировать его следующим образом:

 # Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_path="MODELNAME.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Test model on some input data.
input_shape = input_details[0]['shape']
input_shape1 = input_details[1]['shape']

acc=0
for i in range(len(x_test)):
    input_text = np.array(X_TEST[i].reshape(input_shape), dtype=np.float32)
    interpreter.set_tensor(input_details[0]['index'], input_text)

    input_intent= np.array(X_INPUT[i].reshape(input_shape1), dtype=np.float32)
    interpreter.set_tensor(input_details[1]['index'], input_intent)
  
    interpreter.invoke()
    output_data = interpreter.get_tensor(output_details[0]['index'])
    if(np.argmax(output_data) == np.argmax(y_test[i])): #CHANGE Y_TEST ACCORDINGLY
        acc =1
acc = acc/len(x_test)
print(acc*100)