#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:
Используйте этот поток:
- Получите список параметров ваших входных данных:
input_details = interpreter.get_input_details()
- Определите соответствующие индексы для ваших данных с помощью сопоставления типа / формы из
input_details
- Установите свои тензоры в соответствии с входными данными:
interpreter.set_tensor(input_details[0]['index'], input_text)
interpreter.set_tensor(input_details[1]['index'], input_intent)
- Вызовите свою модель
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)