我想在android上建立一个tflite文件,所以我用jupyter notebook创建了以下模型。
于是我使用jupyter notebook创建了以下模型。
将创建的模型转换为tflite文件后,我们检查它是否被正确转换。
我希望输出的解释器形状结果是 1 这一点,但结果仍然是 110]我应该怎么做?
我做的模型层是这样的。
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'])
当用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)
形状。