Tflite 200MB大

问题描述

我正在建立一个模型来对花朵进行分类。所以我用Tensorflow创建了一个模型:

  keras.layers.Conv2D(128,(3,3),activation='relu',input_shape=(imageShape[0],imageShape[1],3)),keras.layers.MaxPooling2D(2,2),keras.layers.Dropout(0.5),keras.layers.Conv2D(256,activation='relu'),keras.layers.Conv2D(512,keras.layers.Flatten(),keras.layers.Dropout(0.3),keras.layers.Dense(280,keras.layers.Dense(4,activation='softmax')

  opt = tf.keras.optimizers.RMSprop()
  model.compile(loss='categorical_crossentropy',optimizer= opt,metrics=['accuracy'])

在训练时,我将检查点另存为.h5

checkpoint = ModelCheckpoint("preSaved"+str(time.time())+".h5",monitor='val_loss',verbose=1,save_best_only=True,save_weights_only=False,mode='auto',period=1)

现在我有一个损失非常低的纪元,想将其转换为.tflite以便将其上传到Firebase(在Android Studio应用中使用)。

import tensorflow as tf

new_model= tf.keras.models.load_model(filepath="model.h5")
tflite_converter = tf.lite.TFLiteConverter.from_keras_model(new_model)
tflite_converter.inference_type=tf.uint8
tflite_converter.default_ranges_stats=[min_value,max_value]
tflite_converter.quantized_input_stats={"conv2d_6_input_6:0"[mean,std]}
tflite_converter.post_training_quantize=True
tflite_model = tflite_converter.convert()
open("tf_lite_model.tflite","wb").write(tflite_model)

.h5的大小约为335mb,最终的.tflite的大小为160mb。但是Firebase仅允许.tflite的大小为60 mb,如果使用本地模型,则需要几分钟的时间来加载。我读到.tflite通常较小。 我的模型是否存在问题,或者将其转换为.tflite时是否存在问题?

解决方法

模型大小在很大程度上取决于您的模型体系结构(构成模型的不同层以及每个层中的参数数量)。您可以尝试将其更改为更小的模型。

Here是用于图像分类模型的简单得多的体系结构。当然,请记住,与较小的模型相比,使用较小的模型可能会降低准确性。