无法在 tensorflow 版本 2.x

问题描述

  1. tf.keras 中创建了一个简单的虚拟序列模型,如下所示:

    model = tf.keras.Sequential()
    model.add(layers.Dense(10,input_shape=(100,100)))
    model.add(layers.Conv1D(3,2))
    model.add(layers.Flatten())
    model.add(layers.Dense(10,activation='softmax',name='predict_10'))
    
  2. 训练模型并使用 tf.keras.models.saved_model 保存。

  3. 获取 input 输入,output node names 使用 saved_model_cli

    saved_model_cli show --dir "path/to/SavedModel" --all
    

    enter image description here

  4. 使用 freeze_graph.py 实用程序冻结 saved model

    python freeze_graph.py --input_saved_model_dir=<path/to/SavedModel> --output_graph=<path/freeze.pb> --input_binary=True --output_node_names=StatefulPartitionedCall
    

    模型被冻结。

现在是主要问题:

  1. 为了加载冻结图,我使用了本指南 Migrate tf1.x to tf2.x (wrap_frozen_graph)
  2. 使用过
    with tf.io.gfile.GFile("patf/to/freeze.pb",'rb') as f:
       graph_def = tf.compat.v1.GraphDef()
       graph_def.ParseFromString(f.read())
    load_frozen = wrap_frozen_graph(graph_def,inputs='dense_3_input:0',outputs='predict_10:0')
    
  3. 输出错误 ValueError: Input 1 of node StatefulPartitionedCall was passed float from dense_3/kernel:0 incompatible with expected resource.

我在将 .pb 转换为 .dlc (Qualcomm) 时遇到同样的错误。 其实我想在高通的Hexagon DSP或GPU上运行原始模型。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)