python - 为 Google ML Engine 部署减少 Tensorflow SavedModel 的大小
问题描述
我已经开发并训练了一个 CNN Keras 模型,现在我想将此模型部署到 Google 机器学习引擎,这样我就可以使用他们的 API 执行预测。
我已转换为 SavedModel 格式,export/saved_model.pb 有 14MB,/export/variables/ 目录有大约 380MB。Google ML Engine 对此数据的限制为 250MB,并且不允许部署更大的模型。
我看到了一个关于https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms的解决方案,但是由于 VS 未满足的依赖关系,我仍然没有设法构建这个项目。
有没有其他方法可以减少/压缩(尤其是)变量目录?我想要的是将 dtype 从 int64 转换为 int32,但不知道 variables.data-00000-of-00001 文件的格式。
非常感谢!
我在这里将我的 Keras 模型附加到 Tensorflow SavedModel 代码:
# reset session
K.clear_session()
sess = tf.Session()
K.set_session(sess)
# disable loading of learning nodes
K.set_learning_phase(0)
# load model
model = load_model('local-activity-recognition-model.h5')
config = model.get_config()
weights = model.get_weights()
new_Model = Model.from_config(config)
new_Model.set_weights(weights)
# export saved model
export_path = '.' + '/export'
builder = saved_model_builder.SavedModelBuilder(export_path)
signature = predict_signature_def(inputs={'export_input': new_Model.input},
outputs={'export_output': new_Model.output})
with K.get_session() as sess:
builder.add_meta_graph_and_variables(sess=sess,
tags=[tag_constants.SERVING],
signature_def_map={
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature})
builder.save()
解决方案
您可以冻结图表,这应该会缩小一点。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph_test.py
如果你正在构建一个分类器,你可能想要进入 InceptionV3 架构,这可以很容易地通过 tensorflows 重新训练代码进行训练。这种架构只有 90mb。 https://www.tensorflow.org/tutorials/image_retraining https://github.com/tensorflow/hub/blob/master/examples/image_retraining/retrain.py https://github.com/tensorflow/tensorflow/blob/ master/tensorflow/examples/label_image/label_image.py
推荐阅读
- matplotlib - 向 matplotlib 图表添加更多小数?
- python - 我们如何在仍然使用 `class` 关键字的同时覆盖构造函数?
- python-3.x - Selenium 没有通过 xpath、id、class 等找到元素。尝试显式等待
- python - 使用正则表达式从字符串中删除字符
- amazon-s3 - 如何下载 S3-Bucket,即时压缩并重新上传到另一个 s3 存储桶而不在本地下载?
- javascript - 角度:$ 未定义
- c# - 如何更好地将 char 转换为 int 保持数字值而不是 ASCII 值?
- c++ - 所需的最少驾驶室(算法)
- arduino - 检查 lcd.begin() 是否被调用
- azure - 将 powershell azure 命令转换为 CLI