我正在尝试优化保存的图形以进行推理,因此我可以在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')
BTW:如果在Android中加载SavedModel有不同之处,我也想知道。
提前谢谢!
答案 0 :(得分:2)
更新: https://www.tensorflow.org/mobile/prepare_models上有很好的说明,其中包含对SavedModels操作说明的解释。您可以使用--input_saved_model_dir冻结SavedModel到freeze_graph.py。
它们都是协议缓冲区(.pb),但不幸的是它们是不同的消息(即不同的文件格式)。从理论上讲,您可以先从MetaGraph中提取SavedModel,然后“冻结”MetaGraph的GraphDef(将变量移动到常量中),然后在冻结的GraphDef上运行此脚本。在这种情况下,您希望input_fn只是占位符。
您还可以在其中一个"SavedModel support for Android" Github issues上添加一个加号表情符号。中期我们想要对SavedModel进行标准化;对不起,你遇到了这个!