如何将Tensorflow.js(.json)模型转换为Tensorflow(SavedModel)或Tensorflow Lite(.tflite)模型?
我有一个来自Google的Tensorflow.js(tfjs)的预先训练过的PoseNet模型,所以它是一个json文件 但是,我想在Android上使用它,所以我需要如何将Tensorflow.js(.json)模型转换为Tensorflow(SavedModel)或Tensorflow Lite(.tflite)模型?,tensorflow,tensorflow-lite,tensorflow.js,tensorflow2,Tensorflow,Tensorflow Lite,Tensorflow.js,Tensorflow2,我有一个来自Google的Tensorflow.js(tfjs)的预先训练过的PoseNet模型,所以它是一个json文件 但是,我想在Android上使用它,所以我需要.tflite模型。虽然有人将类似的模型从tfjs“移植”到tflite,但我不知道他们转换了什么模型(PoseNet有许多变体)。我想自己做这些步骤。另外,我不想运行某些人上传到stackOverflow文件中的任意代码: 注意:小心不可信的代码TensorFlow模型是代码。有关详细信息,请参阅安全使用TensorFlow
.tflite
模型。虽然有人将类似的模型从tfjs“移植”到tflite,但我不知道他们转换了什么模型(PoseNet有许多变体)。我想自己做这些步骤。另外,我不想运行某些人上传到stackOverflow文件中的任意代码:
注意:小心不可信的代码TensorFlow模型是代码。有关详细信息,请参阅安全使用TensorFlow
有人知道这样做的方便方法吗?通过查看json文件,您可以找到tfjs格式。它经常说“图形模型”。他们之间的区别是 从tfjs图形模型到SavedModel(更常见) 被使用
将tfjs\u graph\u converter.api作为tfjs导入
tfjs.graph\u model\u到保存的\u model(
“savedmodel/posenet/mobilenet/float/050/model-stripe16.json”,
“realsavedmodel”
)
#以下代码摘自https://www.tensorflow.org/lite/convert/python_api
converter=tf.lite.TFLiteConverter.from_saved_model(“realsavedmodel”)
tflite_model=converter.convert()
#保存TF Lite模型。
将tf.io.gfile.gfile('model.tflite','wb')作为f:
f、 写入(tflite_模型)
从tfjs层模型到SavedModel 注意:这只适用于图层模型格式,而不是问题中的图形模型格式。我已经写下了它们之间的区别
.json
文件转换为Keras HDF5文件(从另一个文件)python-m pip install tensorflowjs
而不是pip install tensorflowjs
,因为pyenv没有为我更改pip使用的python
一旦您遵循了,运行tensorflowjs_converter
以验证它是否可以正常工作,并且只需警告您缺少输入路径参数
。然后:
tensorflowjs_converter --input_format=tfjs_layers_model --output_format=keras tfjs_model.json hdf5_keras_model.hdf5
.tflite
文件。以下内容在Python文件中运行:# Convert the model.
model = tf.keras.models.load_model('hdf5_keras_model.hdf5')
tf.keras.models.save_model(
model, filepath, overwrite=True, include_optimizer=True, save_format=None,
signatures=None, options=None
)
在步骤1中,
tensorflowjs_转换器
无法转换。此GitHub意味着PoseNet模型(如OP引用的模型)的格式为tfjs\u graph\u model
(而非tf\u layers\u model
),无法转换为KERA。您是如何将PoseNet模型转换为Keras的?复制步骤:运行Docker容器python:3.8
,然后安装TensorFlow.jspip安装tensorflowjs
,然后尝试转换tensorflowjs\u转换器--input\u format=tfjs\u layers\u model--output\u format=keras/posenet/js/model-strip16.json/posenet/keras/hdf5\u keras\u model.hdf5
。错误消息:File”/usr/local/lib/python3.8/site packages/tensorflow/python/keras/layers/serialization.py”,第101行,在反序列化层class\u name=config['class\u name']keyrorm:'class\u name'
向Glen道歉,我不知道图形模型和层模型格式之间的区别。我是OP,基本上没有回答我自己的问题。我的答案只适用于tfjs\u layers\u model
无需担心。同时,我找到了一个解决方案,可以将TensorFlow.js图形模型可靠地转换为SavedModel格式。从那里,如果需要的话,获得TF-Lite模型应该非常简单。感谢@Glen,我已经能够创建一个model.tflite,并且已经更新了图形和图层模型格式的答案。
# Convert the model.
model = tf.keras.models.load_model('hdf5_keras_model.hdf5')
tf.keras.models.save_model(
model, filepath, overwrite=True, include_optimizer=True, save_format=None,
signatures=None, options=None
)