我开发并训练了CNN Keras模型,现在我想将此模型部署到Google Machine Learning Engine,因此我可以使用他们的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未满足的依赖关系,我仍然无法设置bezel构建此项目。
还有其他方法可以减少/压缩(特别是)变量目录吗?我想要的是将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()
答案 0 :(得分:0)
在构建图形时,模型中是否可以设置变量的dtype?在训练时使用float32通常是一个好主意。
您还可以使用here所述的技术,但需要花费更多精力。
答案 1 :(得分:0)
你可以冻结图表,这应该会缩小一点。 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