Как изменить форму вывода интерпретатора? - PullRequest
2 голосов
/ 28 апреля 2020

Я пытаюсь построить файл tflite на android.

. Поэтому я создал следующую модель с помощью ноутбука jupyter.

После преобразования созданной модели в файл tflite мы проверили был ли он преобразован правильно.

Я хочу, чтобы результат формы выходного интерпретатора был 1 this, но результат по-прежнему 1 [10], что мне делать?

Я делаю слои модели следующим образом.

model = tf.keras.models.Sequential([
  tf.keras.layers.Conv2D(32, (3,3), padding="same", input_shape=X_train.shape[1:], activation="relu"),
  tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
  tf.keras.layers.Conv2D(32, (3,3), padding="same", activation="relu"),
  tf.keras.layers.MaxPooling2D(pool_size=(2,2)),

  tf.keras.layers.Conv2D(64, (3,3), padding="same", activation="relu"),
  tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
  tf.keras.layers.Dropout(0.25),

  tf.keras.layers.Conv2D(64, (3,3), padding="same", activation="relu"),
  tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
  tf.keras.layers.Dropout(0.25),

  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(256, activation="relu"),
  tf.keras.layers.Dropout(0.5),
  tf.keras.layers.Dense(1, activation="sigmoid")
])

Часть преобразования обученной модели в файл tflite

model = tf.keras.models.load_model("./model/model.h5")
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)


interpreter = tf.lite.Interpreter(model_path="converted_model.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
print("--------------")
print("shape:", input_details[0]['shape'])
print("type:", input_details[0]['dtype'])
output_details = interpreter.get_output_details()
print("--------------")
print("shape:", output_details[0]['shape'])
print("type:", output_details[0]['dtype'])

interpreter.resize_tensor_input(input_details[0]['index'], (39, 64, 64))
interpreter.resize_tensor_input(output_details[0]['index'], (39, 5))
interpreter.allocate_tensors()

input_details = interpreter.get_input_details()
print("--------------")
print("shape:", input_details[0]['shape'])
print("type:", input_details[0]['dtype'])
output_details = interpreter.get_output_details()
print("--------------")
print("shape:", output_details[0]['shape'])
print("type:", output_details[0]['dtype'])

введите описание изображения здесь

1 Ответ

0 голосов
/ 30 апреля 2020

При создании модели с Keras вы можете использовать:

from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model

# some stuff your code does

input = Input((THE_HEIGHT_YOU_WANT, THE_WIDTH_YOU_WANT, THE_CHANNELS_YOU_WANT))

# all the Tensorflow ops you want on "input"

model = Model(input, THE_OUTPUT_YOU_WANT)

# any other stuff your code might do before saving

model.save(THE_PATH_YOU_WANT)

loaded_model = tf.keras.models.load_model(THE_PATH_YOU_WANT)

# rest of your code for converting and saving the model

теперь при работе на Android вы можете использовать:

tensorflowLiteInterpreterInstance.getInputTensor(inputTensorIndex).shape()

, чтобы получить форму модели.

Форма должна соответствовать форме (THE_HEIGHT_YOU_WANT, THE_WIDTH_YOU_WANT, THE_CHANNELS_YOU_WANT).

...