加载保存的模型会在tfjs中导致“'getIndices':找不到匹配的重载函数”

时间:2019-03-16 06:08:16

标签: tensorflow.js tensorflowjs-converter

我遇到类似Loading saved_model causes "Failed to compile fragment shader" for gather op的问题 enter image description here

const MODEL_URL = './web_model/tensorflowjs_model.pb';
const WEIGHTS_URL = './web_model/weights_manifest.json';
async function predict(){
  const model = await tf.loadFrozenModel(MODEL_URL, WEIGHTS_URL);
  var input_x = tf.tensor([[2714,    0,    0,   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0]],shape=[1,50],dtype='int32');
  var dropout_keep_prob = 1.0;
  var output = model.execute({dropout_keep_prob:dropout_keep_prob, input_x:input_x});
  console.log(output);
}
predict();

这与我的模特有关:

self.input_x = tf.placeholder(tf.int32, [None, sequence_length], name="input_x")
self.input_y = tf.placeholder(tf.float32, [None, num_classes], name="input_y")
self.dropout_keep_prob = tf.placeholder(tf.float32, name="dropout_keep_prob")
self.scores = tf.nn.xw_plus_b(self.h_drop, W, b, name="scores")
self.predictions = tf.argmax(self.scores, 1, name="predictions")
tf.saved_model.simple_save(sess, "./saved_model",
                           inputs={"input_x": cnn.input_x, }, outputs={"predictions": cnn.predictions,"scores":cnn.scores,})

我只是将我保存的模型转换为该网页。

这是Python tensorflow输入,正如您所知,该模型以前是python脚本,我想将其转换为tfjs。

inputs_major = np.zeros(shape=[1,max_seq_length], dtype=np.int32)
for v in range(len(vec)):
    inputs_major[0][v] = vec[v]

我更新了tf.js,但已删除loadFrozenModel,并将其更改为loadGraphModel,错误为 “未捕获(承诺)错误:无法解析来自./web_model/tensorflowjs_model.pb的响应的模型JSON。您的路径包含.pb文件扩展名。TensorFlow.js 1.0中已删除对.pb模型的支持,而支持。您可以使用TensorFlow.js 1.0转换脚本重新转换Python TensorFlow模型,也可以在tensorflow / tfjs-converter存储库中使用'pb2json'NPM脚本转换.pb模型。”

所以我尝试使用tensorflowjs转换器1.0.1而不是0.8,而我的tf版本是1.13。

“ tensorflow.python.eager.lift_to_graph.UnliftableError:无法拉伸张量,因为它通过至少一条路径可传递地依赖于占位符,例如:IdentityN(IdentityN)<-scores(BiasAdd)<-scores / MatMul(MatMul)<-退出/ dropout / mul(Mul)<-dropout / dropout / Floor(Floor)<-dropout / dropout / add(添加)<-dropout_keep_prob(占位符)“

我认为是因为我的save_model错误,

self.input_x = tf.placeholder(tf.int32, [None, sequence_length], name="input_x")
self.input_y = tf.placeholder(tf.float32, [None, num_classes], name="input_y")
self.dropout_keep_prob = tf.placeholder(tf.float32, name="dropout_keep_prob")
self.scores = tf.nn.xw_plus_b(self.h_drop, W, b, name="scores")
self.predictions = tf.argmax(self.scores, 1, name="predictions")
tf.saved_model.simple_save(sess, "./saved_model",
                           inputs={"input_x": cnn.input_x,},
                           outputs={"predictions": cnn.predictions, "scores": cnn.scores, })

所以我更改了代码。

tf.saved_model.simple_save(sess, "./saved_model",
                           inputs={"input_x": cnn.input_x, "dropout_keep_prob":cnn.dropout_keep_prob,},
                           outputs={"predictions": cnn.predictions, "scores": cnn.scores, })

保存时 “警告:tensorflow:来自D:\ Python \ Python35 \ lib \ site-packages \ tensorflow \ python \ saved_model \ signature_def_utils_impl.py:205:build_tensor_info(来自tensorflow.python.saved_model.utils_impl)已被弃用,并将在a中删除未来版本。 更新说明: 此功能只能通过v1兼容性库作为tf.compat.v1.saved_model.utils.build_tensor_info或tf.compat.v1.saved_model.build_tensor_info使用。”

错误是 “由于缺少TensorBoard安装而限制了tf.compat.v2.summary API 2019-03-20 19:43:18.894836:I tensorflow / core / grappler / devices.cc:53]合格GPU的数量(核心计数> = 8):0(注意:TensorFlow未使用CUDA支持进行编译) 2019-03-20 19:43:18.909183:我tensorflow / core / grappler / clusters / single_machine.cc:359]开始新的会话 2019-03-20 19:43:18.931823:I tensorflow / core / platform / cpu_feature_guard.cc:142]您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX2 2019-03-20 19:43:18.989768:E tensorflow / core / grappler / grappler_item_builder.cc:636]初始化节点嵌入/ W / Assign在图中不存在 追溯(最近一次通话):   在OptimizeGraph中,文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflow \ python \ grappler \ tf_optimizer.py”,第43行     详细,graph_id,状态) SystemError:未设置错误就返回NULL

在处理上述异常期间,发生了另一个异常:

回溯(最近通话最近):   _run_module_as_main中的文件“ d:\ anaconda3 \ lib \ runpy.py”,第193行     “ 主要”,mod_spec)   文件“ d:\ anaconda3 \ lib \ runpy.py”,第85行,_run_code     exec(代码,run_globals)   文件“ D:\ Anaconda3 \ Scripts \ tensorflowjs_converter.exe__main __。py”,第9行,在   主目录中的文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflowjs \ converters \ converter.py”,第358行     strip_debug_ops = FLAGS.strip_debug_ops)   文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflowjs \ converters \ tf_saved_model_conversion_v2.py”,第271行,在convert_tf_saved_model中     concrete_func)   文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ convert_to_constants.py”,行140,位于convert_variables_to_constants_v2中     graph_def = _run_inline_graph_optimization(功能)   _run_inline_graph_optimization中的文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ convert_to_constants.py”,第59行     返回tf_optimizer.OptimizeGraph(config,meta_graph)   在OptimizeGraph中,文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflow \ python \ grappler \ tf_optimizer.py”,第43行     详细,graph_id,状态)   退出中的文件“ d:\ anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ errors_impl.py”,第548行     c_api.TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.InvalidArgumentError:无法导入元图,请检查错误日志以获取更多信息。“

希望您能给我一些帮助,这个问题几乎使我发疯。 谢谢!

1 个答案:

答案 0 :(得分:0)

最后,我放弃了,因为最新版本已删除了loadFrozenModel,并且支持很少。我尝试使用keras模型并且有效。