如何将Keras(h5)文件转换为TFLite文件?

41

我得到了一个keras (h5)文件。 我需要将其转换为tflite吗?? 我进行了研究,首先我需要通过h5 -> pb -> tflite (因为h5 - tflite有时会导致一些问题)

11个回答

34
from tensorflow.contrib import lite
converter = lite.TFLiteConverter.from_keras_model_file( 'model.h5')
tfmodel = converter.convert()
open ("model.tflite" , "wb") .write(tfmodel)

您可以使用TFLiteConverter直接将.h5文件转换为.tflite文件。 这在Windows上不起作用。

对于Windows,请使用Google Colab笔记本进行转换。上传.h5文件,它将把它转换为.tflite文件。

如果您想自己尝试,请按照以下步骤:

  1. 创建一个Google Colab笔记本。在左上角,点击“上传”按钮并上传您的.h5文件。
  2. 创建一个代码单元格并插入此代码。

    from tensorflow.contrib import lite
    converter = lite.TFLiteConverter.from_keras_model_file( 'model.h5' ) # 您的模型名称
    model = converter.convert()
    file = open( 'model.tflite' , 'wb' ) 
    file.write( model )
    
  3. 运行该单元格。您将获得一个model.tflite文件。右键单击该文件并选择“下载”选项。


3
在更新版本的tensorflow中,TFLiteConverter已经转移到了tf.lite.TFLiteConverter。参见:https://www.tensorflow.org/lite/convert/python_api - Luke Needham
那么我能否使用tensorflow版本1.14(我正在使用的版本)中的tf.lite.TFLiteConverter将普通的Keras模型转换为tflite?因为文档中说可以通过tf.lite.TFLiteConverter将tf.keras模型转换。这是否也适用于普通的keras模型?在我的代码中,我使用的是旧版的Keras pip安装包,而不是tensorflow内部的tf.keras。 - user rk

33

我在Windows 10上使用Tensorflow 2.1.0和Keras 2.3.1时,这对我有效。

import tensorflow as tf

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

5

我刚刚在notebook中使用以下代码通过CoLab完成了这个操作:

import tensorflow as tf
model = tf.keras.models.load_model('yourmodel.h5')
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflmodel = converter.convert()
file = open( 'yourmodel.tflite' , 'wb' ) 
file.write( tflmodel )

我在 CoLab 上上传 h5 模型时遇到了困难,因此我挂载了我的 Google Drive,在那里上传了它,然后将其移动到笔记本内容文件夹中。


1
import tensorflow as tf
from tensorflow import lite
from tensorflow.keras.models import load_model
converter = lite.TFLiteConverter.from_keras_model(model)
tfmodel = converter.convert()
open ("model.tflite" , "wb") .write(tfmodel)

这对我来说有效。我正在使用keras==2.6.0和tensorflow-cpu==2.5.0版本。更多信息,请访问https://www.tensorflow.org/guide/keras/save_and_serialize


1
如果您正在使用Tensorflow-2,可以按照以下步骤进行操作:
import tensorflow as tf
from keras.models import load_model
model = load_model("model.h5")
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tfmodel = converter.convert()
open("model.tflite", "wb") .write(tfmodel)

在TF-2中,需要加载Keras模型实例并返回转换后的实例。请查看此链接了解更多详细信息。

1
从会话中转换GraphDef。
converter = lite.TFLiteConverter.from_session(sess, in_tensors, out_tensors)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

从文件中转换GraphDef。

converter = lite.TFLiteConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

将一个SavedModel转换。
converter = lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()

你好,这个工具将模型转换为 mode.pb。 - Black Snow

1
如果您正在使用 Google Colab Notebook,请尝试以下操作:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model_file('model.h5') 
tfmodel = converter.convert() 
open ('model.tflite' , "wb") .write(tfmodel)

0

对于Tensorflow GPU 2.6.2和Keras 2.6.0

import tensorflow as tf
model=tf.keras.models.load_model("./your_model.h5")
converter = tf.lite.TFLiteConverter.from_keras_model(model) 
converter.experimental_new_converter = True
tflite_model = converter.convert()
file = open( 'converted_model.tflite' , 'wb' ) 
file.write( tflite_model )

0

0

将RetinaNet转换为tflite格式

import tensorflow as tf
from keras_retinanet.models import load_model
from keras.layers import Input
from keras.models import Model

def get_file_size(file_path):
    size = os.path.getsize(file_path)
    return size
    
def convert_bytes(size, unit=None):
    if unit == "KB":
        return print('File size: ' + str(round(size / 1024, 3)) + ' Kilobytes')
    elif unit == "MB":
        return print('File size: ' + str(round(size / (1024 * 1024), 3)) + ' Megabytes')
    else:
        return print('File size: ' + str(size) + ' bytes')

def convert_model_to_tflite(model_path = "/content/drive/MyDrive/Model/resnet152_csv_180_inference.h5", filename = "converted_model.tflite"):
  model = load_model(model_path)
  fixed_input = Input((416,416,3))
  fixed_model = Model(fixed_input,model(fixed_input))
  converter = tf.lite.TFLiteConverter.from_keras_model(model)
  converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
    tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
  ]
  tflite_model = converter.convert()
  open(filename, "wb").write(tflite_model)
  print(convert_bytes(get_file_size("converted_model.tflite"), "MB"))

你好,欢迎来到 Stack Overflow。你的回答与其他回答非常相似,请在回答中添加更多信息,说明为什么你的回答更有用,或者干脆删除它。 - geertjanvdk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接