我正在尝试优化保存的推理图,以便我可以在 Android 中使用它。
我第一次尝试使用 optimize_for_inference 脚本失败了
google.protobuf.message.DecodeError: Truncated message
所以我的问题是输入/输出节点是否错误或脚本无法处理 SavedModels(尽管它与卡住图 .pb 的扩展名相同)
关于第一个:由于使用 Estimators 我们提供 input_fn 而不是数据本身,哪个应该被视为输入?第一个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 有什么不同,我也想知道。
先感谢您!
最佳答案
更新: https://www.tensorflow.org/mobile/prepare_models 中有很好的说明,其中包括对如何使用 SavedModels 的说明。您可以使用 --input_saved_model_dir 到 freeze_graph.py 卡住您的 SavedModel。
它们都是 Protocol Buffer (.pb),但不幸的是它们是不同的消息(即不同的文件格式)。从理论上讲,您可以首先从 MetaGraph 中提取 SavedModel ,然后“卡住” MetaGraph 的 GraphDef(将变量移动到常量),然后在卡住的 GraphDef 上运行此脚本。在这种情况下,您希望 input_fn 只是占位符。
您还可以在 "SavedModel support for Android" Github issues 之一上添加加一表情符号。中期我们希望对 SavedModel 进行标准化;很抱歉你遇到了这个!
关于python - TensorFlow:优化推断由 Estimator 导出的 SavedModel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46239139/