如何将 TensorFlow 模型 2.0 转换为 2.0 API 的 tslite 模型?
How convert a TensorFlow model 2.0 to tslite model with 2.0 API?
如何将 TensorFlow 模型 2.0 转换为带有 2.0 的 tslite 模型API?
我试图将我的自定义 TensorFlow
模型导出为 tflite
格式,因为我想将此模块集成到 Android 应用程序中。编译 Python 脚本后出现奇怪的错误。
Used: Tensorflow 2.0.0 beta1 API
https://www.tensorflow.org/lite/r2/convert
我尝试了这些方法来转换:
- From SavedModelFrom
- tf.Keras Model
这些点将显示在下面的代码中。
CipherNeuralModel = keras.Sequential([
keras.layers.Flatten(input_shape=[20, 20]),
keras.layers.Dense(400, activation='relu'),
keras.layers.Dense(26, activation='softmax')
])
CipherNeuralModel.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
CipherNeuralModel.fit(trainSumData, imgNumberFromLit, epochs=10, steps_per_epoch=20)
savePath = "D:\FolderToModel"
tf.saved_model.save(CipherNeuralModel, savePath)
export_model = tf.saved_model.load(savePath)
concrete_func = export_model.signatures[
tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY
]
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
# Error here
converter = converter.convert()
# Example for convert tf.keras model to tflite
# convert_model = tf.function(lambda x: CipherNeuralModel(x))
# concrete_func = convert_model.get_concrete_function(
# tf.TensorSpec(CipherNeuralModel.inputs[0].shape,
# CipherNeuralModel.inputs[0].dtype))
# convertor = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
# tflite_model = convertor.convert()
TOCO failed. See console for info.\n%s\n%s\n" % (stdout, stderr))
tensorflow.lite.python.convert.ConverterError: TOCO failed. See
console for info. b'"toco_from_protos" \xad\xa5
\xef\xa2\xab\xef\xa5\xe2\xe1\xef
\xa2\xad\xe3\xe2\xe0\xa5\xad\xad\xa5\xa9 \xa8\xab\xa8
当库的文件路径很长(超过 255 个字符)时,就会出现此问题。要解决这个问题需要注意以下几点:
将模型导出到文件:
savePath = "D:\FolderToModel"
tf.saved_model.save(CipherNeuralModel, savePath)
将模型下载到您的 google 驱动器
在https://colab.research.google.com
创建项目
将您的 google 驱动器连接到项目:
from google.colab import drive
drive.mount('/content/drive')
导入tensorflow库到项目:
pip install tensorflow==2.0.0-rc0
从 google 驱动器中的文件导入模型并将其转换为 tensorflow lite 模型:
path = '/content/drive/My Drive/highModelNeural'
export_model = tf.saved_model.load(path)
concrete_func = export_model.signatures[
tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY
]
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
converter = converter.convert()
将您的 tensorflow lite 模型导入文件,该文件将在 google 驱动器中创建:
open("/content/drive/My Drive/highModelNeural/model70v5.tflite", "wb").write(converter)
之后,您可以在 android 应用程序或嵌入式设备中使用 TFlite 模型。
如何将 TensorFlow 模型 2.0 转换为带有 2.0 的 tslite 模型API?
我试图将我的自定义 TensorFlow
模型导出为 tflite
格式,因为我想将此模块集成到 Android 应用程序中。编译 Python 脚本后出现奇怪的错误。
Used: Tensorflow 2.0.0 beta1 API https://www.tensorflow.org/lite/r2/convert
我尝试了这些方法来转换:
- From SavedModelFrom
- tf.Keras Model
这些点将显示在下面的代码中。
CipherNeuralModel = keras.Sequential([
keras.layers.Flatten(input_shape=[20, 20]),
keras.layers.Dense(400, activation='relu'),
keras.layers.Dense(26, activation='softmax')
])
CipherNeuralModel.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
CipherNeuralModel.fit(trainSumData, imgNumberFromLit, epochs=10, steps_per_epoch=20)
savePath = "D:\FolderToModel"
tf.saved_model.save(CipherNeuralModel, savePath)
export_model = tf.saved_model.load(savePath)
concrete_func = export_model.signatures[
tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY
]
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
# Error here
converter = converter.convert()
# Example for convert tf.keras model to tflite
# convert_model = tf.function(lambda x: CipherNeuralModel(x))
# concrete_func = convert_model.get_concrete_function(
# tf.TensorSpec(CipherNeuralModel.inputs[0].shape,
# CipherNeuralModel.inputs[0].dtype))
# convertor = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
# tflite_model = convertor.convert()
TOCO failed. See console for info.\n%s\n%s\n" % (stdout, stderr)) tensorflow.lite.python.convert.ConverterError: TOCO failed. See console for info. b'"toco_from_protos" \xad\xa5 \xef\xa2\xab\xef\xa5\xe2\xe1\xef \xa2\xad\xe3\xe2\xe0\xa5\xad\xad\xa5\xa9 \xa8\xab\xa8
当库的文件路径很长(超过 255 个字符)时,就会出现此问题。要解决这个问题需要注意以下几点:
将模型导出到文件:
savePath = "D:\FolderToModel" tf.saved_model.save(CipherNeuralModel, savePath)
将模型下载到您的 google 驱动器
在https://colab.research.google.com
创建项目将您的 google 驱动器连接到项目:
from google.colab import drive drive.mount('/content/drive')
导入tensorflow库到项目:
pip install tensorflow==2.0.0-rc0
从 google 驱动器中的文件导入模型并将其转换为 tensorflow lite 模型:
path = '/content/drive/My Drive/highModelNeural' export_model = tf.saved_model.load(path) concrete_func = export_model.signatures[ tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY ] converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func]) converter = converter.convert()
将您的 tensorflow lite 模型导入文件,该文件将在 google 驱动器中创建:
open("/content/drive/My Drive/highModelNeural/model70v5.tflite", "wb").write(converter)
之后,您可以在 android 应用程序或嵌入式设备中使用 TFlite 模型。