将.pb转换为.mlmodel时出错

时间:2018-06-25 19:41:49

标签: python tensorflow coreml

我正在尝试结合根据本教程创建的受过训练的CNN文本分类器: http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

我创建了一个模型,使用检查点目录表示。我想将此整合到我的IOS应用程序中。

我已经冻结了该模型,并从冻结的模型中删除了所有遗漏。这导致了以下张量输出:

0 output/b_0/grad/sparsity/tags Const
1 zero_fraction_8/Const Const
2 zero_fraction_8/zero Const
3 gradients/loss/SoftmaxCrossEntropyWithLogits_grad/ExpandDims/dim Const
4 gradients/output/add_1_grad/Shape_1 Const
5 gradients/output/add_1_grad/Shape Const
6 gradients/output/add_1_grad/BroadcastGradientArgs 
BroadcastGradientArgs
└─── 0 ─ gradients/output/add_1_grad/Shape
└─── 1 ─ gradients/output/add_1_grad/Shape_1
7 gradients/loss/mul_grad/Shape_1 Const
8 gradients/loss/mul_grad/Shape Const
9 gradients/loss/mul_grad/BroadcastGradientArgs BroadcastGradientArgs
└─── 0 ─ gradients/loss/mul_grad/Shape
└─── 1 ─ gradients/loss/mul_grad/Shape_1
10 gradients/loss/Mean_grad/Maximum/y Const
11 gradients/loss/Mean_grad/Const_1 Const
12 gradients/loss/Mean_grad/Const Const
13 gradients/loss/Mean_grad/Shape_2 Const
14 gradients/loss/Mean_grad/Prod_1 Prod
└─── 0 ─ gradients/loss/Mean_grad/Shape_2
└─── 1 ─ gradients/loss/Mean_grad/Const_1
...

当我尝试运行以下命令将冻结的图形转换为tfcoreml时:

frozen_model_file = os.path.abspath("frozen_model_without_dropout.pb")
input_tensor_shapes = {"input_y:0" :[1, 2], "input_x:0" : [1,156]}
# Output CoreML model path
coreml_model_file = './model.mlmodel'
output_tensor_names = ['output/b_0/grad/sparsity:0']
def convert():
    # Read the pb model
    with tf.gfile.GFile(frozen_model_file, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())

    # Then, we import the graph_def into a new Graph
    tf.import_graph_def(graph_def, name="")

    # Convert
    tfcoreml.convert(
        tf_model_path=frozen_model_file,
        mlmodel_path=coreml_model_file,
        input_name_shape_dict=input_tensor_shapes,
        output_feature_names=output_tensor_names

        )

convert()

我遇到以下问题:

Traceback (most recent call last):
  File "convert_pb_tfcoreml.py", line 80, in <module>
    convert()
  File "convert_pb_tfcoreml.py", line 76, in convert
    output_feature_names=output_tensor_names
  File "/home/ubuntu/tf-coreml/tfcoreml/_tf_coreml_converter.py", line 
552, in convert
    custom_conversion_functions=custom_conversion_functions)
  File "/home/ubuntu/tf-coreml/tfcoreml/_tf_coreml_converter.py", line 262, in _convert_pb_to_mlmodel
    unused_ops, effectively_constant_ops = _find_unused_ops(OPS, sess, 
output_feature_names, input_feed_dict, input_feed_dict2) # return type: 
List[str], List[str]
  File "/home/ubuntu/tf-coreml/tfcoreml/_tf_graph_transform.py", line 99, in _find_unused_ops
    out1 = tensors_evaluated1[idx].flatten().astype(np.float32)
AttributeError: 'str' object has no attribute 'flatten'

我认为这个问题与张量的形状有关,但是我不确定确切如何修复它。另外,如果有更直观的方法将训练有素的CNN文本分类张量流模型合并到IOS应用中,请告诉我。

0 个答案:

没有答案