Tensorflow(十七)模型保存与部署

此生再无相见时 提交于 2020-01-16 06:14:09

Tensorflow2.0

HDF5是keras的专有模块,和SavedModel都会被转化成签名函数。Concrete Function是一个签名函数,有固定格式的输入和输出。 最终转化成Flatbuffer,服务端运行结束。Tensorflow1.0使用checkpoint和graphdef,2.0并不推荐使用

Image result for Tensorflow HDF5和SavedModel

保存:参数+网络结构

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")

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!