Tensorflow2.0
HDF5是keras的专有模块,和SavedModel都会被转化成签名函数。Concrete Function是一个签名函数,有固定格式的输入和输出。 最终转化成Flatbuffer,服务端运行结束。Tensorflow1.0使用checkpoint和graphdef,2.0并不推荐使用
保存:参数+网络结构
TFLite——FlatBuffer
Google开源的跨平台数据序列化库
优点:直接读取序列化数据,高效的内存使用和速度,灵活兼容,使用少量代码可完成功能。
TFLite量化,参数从float变成8bit,模型大小会变原来的四分之一,将float缩放到一个区间,并取一个最接近的整数。
二 使用checkpoint保存模型和参数
三 keras模型转化为SavedModel
Notebook中使用命令行工具的需要在最开始的加一个!
# model是训练好的模型
tf.saved_model.save(model, "./keras_saved_graph")
# 在路径下,有saved_model.pb
# 命令行工具 查看model
!saved_model_cli show --dir ./keras_saved_graph --all
# 签名定义中会存储输入输出信息
!saved_model_cli show --dir ./keras_saved_graph \
--tag_set serve --signature_def serving_default
# 手动赋值
!saved_model_cli run --dir ./keras_saved_graph --tag_set serve \
--signature_def serving_default \
--input_exprs 'flatten_input=np.ones((2, 28, 28))'
loaded_saved_model = tf.saved_model.load('./keras_saved_graph')
print(list(loaded_saved_model.signatures.keys()))
inference = loaded_saved_model.signatures['serving_default']
print(inference)
print(inference.structured_outputs)
results = inference(tf.constant(x_test_scaled[0:1]))
print(results['dense_2'])
四 签名函数转化为SavedModel
将签名函数保存在module的成员变量中,然后再转成SavedModel
@tf.function(input_signature=[tf.TensorSpec([None], tf.int32, name='x')])
def cube(z):
return tf.pow(z, 3)
cube_func_int32 = cube.get_concrete_function(
tf.TensorSpec([None], tf.int32))
print(cube_func_int32)
print(cube_func_int32 is cube.get_concrete_function(
tf.TensorSpec([5], tf.int32)))
print(cube_func_int32 is cube.get_concrete_function(
tf.constant([1, 2, 3])))
cube_func_int32.graph
to_export = tf.Module()
to_export.cube = cube
tf.saved_model.save(to_export, "./signature_to_saved_model")
来源:CSDN
作者:momo大魔王
链接:https://blog.csdn.net/weixin_38087754/article/details/103973341