Python TensorFlow:优化推断由估计器导出的保存模型

Python TensorFlow:优化推断由估计器导出的保存模型,python,machine-learning,tensorflow,Python,Machine Learning,Tensorflow,我正在尝试优化一个保存的图形以进行推理,这样我就可以在Android中使用它了 我第一次尝试使用optimize_for_推断脚本失败 google.protobuf.message.DecodeError: Truncated message 因此,我的问题是输入/输出节点是否错误,或者脚本是否无法处理SavedModels(尽管它与冻结的graph.pb是相同的扩展名) 关于第一个问题:由于我们提供的是估计量,而不是数据本身,那么哪个应该被视为输入?第一次tf行动?比如: x = x_di

我正在尝试优化一个保存的图形以进行推理,这样我就可以在Android中使用它了

我第一次尝试使用optimize_for_推断脚本失败

google.protobuf.message.DecodeError: Truncated message
因此,我的问题是输入/输出节点是否错误,或者脚本是否无法处理SavedModels(尽管它与冻结的graph.pb是相同的扩展名)

关于第一个问题:由于我们提供的是估计量,而不是数据本身,那么哪个应该被视为输入?第一次tf行动?比如:

x = x_dict['gestures']

# Data input is a 1-D vector of x_dim * y_dim features ("pixels")
# Reshape to match format [Height x Width x Channel]
# Tensor input become 4-D: [Batch Size, Height, Width, Channel]
x = tf.reshape(x, shape=[-1, x_dim, y_dim, 1], name='input')

(...)

pred_probs = tf.nn.softmax(logits, name='output')
顺便说一句:如果在Android中加载SavedModel有什么不同,我也想知道


提前谢谢你

更新:有一些很好的说明,其中包括如何处理保存的模型的说明。可以使用to freeze_graph.py冻结保存的模型

它们都是协议缓冲区(.pb),但不幸的是它们是不同的消息(即不同的文件格式)。理论上,您可以首先从提取,然后“冻结”元图的GraphDef(将变量移动到常量中),然后在冻结的GraphDef上运行此脚本。在这种情况下,您希望您的输入仅仅是占位符


您还可以在其中一个屏幕上添加一个加一的表情符号。中期而言,我们希望在SavedModel上实现标准化;很抱歉你碰到了这个

谢谢你的回复。将+1添加到问题中,因为如果要使用SavedModel,它确实是必须的。关于输入/输出节点的命名:my input_fn使用tf.estimator.inputs.numpy_input_fn来填充特征字典和标签。这里没有实际的节点(也没有办法正确命名潜在的占位符),所以我尝试使用x上的第一个TF操作作为输入(请参见问题)。暂时改为“原始”TF(发行中的进一步问题),但非常喜欢Estimator API和它附带的(或应该提供的)所有功能。计划的策略是有一个输入用于培训(例如,您的numpy输入),然后在导出保存的模型时,您使用一个输入接收器(听起来像是你在追求什么)或者。这样你就不需要摆弄训练输入,也可以服务。是的,为了保存模型,我使用tf.estimator.export.build\u raw\u serving\u input\u receiver\u fn(功能规格),其中功能规格映射了一个tf.placeholder(dtype=tf.float32,shape=[None,total\u dimension])我的问题是关于优化用于推理的方法,这类方法总是需要输入和输出节点的名称,使用估计器API(输入和模型)我不清楚建立网络。谢谢你的评论anyway@AllenLavoie:因此,如果我理解正确,如果我们使用保存的_模型服务图,就无法优化用于推理的图?请让我知道是否有一种方法可以冻结服务图,将示例proto作为我的推理图的输入节点?我认为SavedModel现在使用冻结图?请参阅和。我将更新答案。