如何在iOS上使用重新训练的“诗人张量流”图表?

时间:2018-01-05 16:47:07

标签: ios tensorflow coreml

对于“诗人的张量流”,我重新训练了inceptionv3图。现在我想使用tfcoreml转换器将图形转换为iOS coreML模型。

但tf_coreml_converter.py以“NotImplementedError:不支持的Ops类型:PlaceholderWithDefault”停止。

我已经尝试过“optimize_for_inference”和“strip_unused”,但我无法摆脱这种不受支持的操作“PlaceholderWithDefault”。

知道在针对诗人的tensorflow训练后需要采取哪些步骤,将“tensorflow-for-poets”图(inceptionv3)转换为iOS coreML模型?

3 个答案:

答案 0 :(得分:1)

创建此图表的人使用tf.placeholder_with_default()来定义占位符(TF中的占位符用于神经网络的输入)。由于tf-coreml不支持PlaceholderWithDefault操作,因此您无法使用此图。

可能的解决方案:

  • 使用tf.placeholder()来定义占位符。问题是你需要从头开始重新训练图表,因为Tensorflow for Poets使用了预训练图,你不能再使用它了。
  • 使用占位符替换PlaceholderWithDefault op。
  • Hack tf-coreml在遇到PlaceholderWithDefault操作时使用占位符操作。这可能是最快的解决方案。

更新:从代码中看,最近对tf-coreml的更新现在只是跳过了PlaceholderWithDefault层。它不应再给出错误消息。因此,如果你使用最新版本的tf-coreml(不是使用pip,而是通过检查GitHub repo的主分支),那么你就不应该再出现这个错误了。

答案 1 :(得分:1)

我通过以下步骤从诗人图的重新训练张量流中删除了PlaceholderWithDefault操作:

  1. 优化干扰图:

    python -m tensorflow.python.tools.optimize_for_inference \ --input retrained_graph.pb \ --output graph_optimized.pb \ --input_names=Mul\ --output_names=final_result

  2. 使用transform_graph工具删除PlaceholderWithDefault操作:

    bazel build tensorflow/tools/graph_transforms:transform_graph bazel-bin/tensorflow/tools/graph_transforms/transform_graph \ --in_graph=graph_optimized.pb \ --out_graph=graph_optimized_stripped.pb \ --inputs='Mul' \ --outputs='final_result' \ --transforms='remove_nodes(op=PlaceholderWithDefault)'

  3. 之后我可以将其转换为coreML。但正如Matthijs已经指出的那样,来自git hub的最新版本的tfcoreml会自动完成它。

答案 2 :(得分:0)

 import tfcoreml as tf_converter
 tf_converter.convert(tf_model_path = '/Users/username/path/tf_files/retrained_graph.pb',
     mlmodel_path = 'MyModel.mlmodel',
     output_feature_names = ['final_result:0'],
     input_name_shape_dict = {'input:0':[1,224,224,3]},
     image_input_names = ['input:0'],
     class_labels = '/Users/username/path/tf_files/retrained_labels.txt',
     image_scale=2/255.0,
     red_bias=-1,
     green_bias=-1,
     blue_bias=-1
 )

使用tfcoreml,我发现这些设置成功。