对于“诗人的张量流”,我重新训练了inceptionv3图。现在我想使用tfcoreml转换器将图形转换为iOS coreML模型。
但tf_coreml_converter.py以“NotImplementedError:不支持的Ops类型:PlaceholderWithDefault”停止。
我已经尝试过“optimize_for_inference”和“strip_unused”,但我无法摆脱这种不受支持的操作“PlaceholderWithDefault”。
知道在针对诗人的tensorflow训练后需要采取哪些步骤,将“tensorflow-for-poets”图(inceptionv3)转换为iOS coreML模型?
答案 0 :(得分:1)
创建此图表的人使用tf.placeholder_with_default()
来定义占位符(TF中的占位符用于神经网络的输入)。由于tf-coreml不支持PlaceholderWithDefault操作,因此您无法使用此图。
可能的解决方案:
tf.placeholder()
来定义占位符。问题是你需要从头开始重新训练图表,因为Tensorflow for Poets使用了预训练图,你不能再使用它了。更新:从代码中看,最近对tf-coreml的更新现在只是跳过了PlaceholderWithDefault层。它不应再给出错误消息。因此,如果你使用最新版本的tf-coreml(不是使用pip,而是通过检查GitHub repo的主分支),那么你就不应该再出现这个错误了。
答案 1 :(得分:1)
我通过以下步骤从诗人图的重新训练张量流中删除了PlaceholderWithDefault操作:
优化干扰图:
python -m tensorflow.python.tools.optimize_for_inference \
--input retrained_graph.pb \
--output graph_optimized.pb \
--input_names=Mul\
--output_names=final_result
使用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)'
之后我可以将其转换为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,我发现这些设置成功。