tensorflowjs-converter:无法导入元图,请检查错误日志以获取更多信息

时间:2019-03-20 15:22:40

标签: tensorflow.js tensorflowjs-converter

我只想将python模型转换为tensorflow.js模型,但保存为.pb后,我运行“ tensorflowjs_converter --input_format = tf_saved_model --output_format = tfjs_graph_model --signature_name = serving_default --saved_model_tags = serve ./saved_model ./web_model”,出现错误。

2019-03-20 23:07:05.970985:I tensorflow / core / grappler / devices.cc:53]合格GPU的数量(核心数> = 8):0(注意:TensorFlow未使用CUDA支持进行编译) 2019-03-20 23:07:05.978764:我tensorflow / core / grappler / clusters / single_machine.cc:359]开始新的会话 2019-03-20 23:07:05.985340:I tensorflow / core / platform / cpu_feature_guard.cc:142]您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX2 2019-03-20 23:07:06.072370:E tensorflow / core / grappler / grappler_item_builder.cc:636]初始化节点变量/赋值在图中不存在 追溯(最近一次通话):   在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:无法导入元图,请检查错误日志以获取更多信息。

这是我的代码。 tensorflow的版本是1.14.0(预览,因为我无法安装tf 2.0)

# coding=utf-8#
import tensorflow as tf
import numpy as np

x_data = [[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 1.0]]
y_data = [[0.0], [1.0], [1.0], [0.0]]  
x_test = [[0.0, 1.0], [1.0, 1.0]]  
xs = tf.placeholder(tf.float32, [None, 2])
ys = tf.placeholder(tf.float32, [None, 1])


W1 = tf.Variable(tf.random_normal([2, 10]))
B1 = tf.Variable(tf.zeros([1, 10]) + 0.1)
out1 = tf.nn.relu(tf.matmul(xs, W1) + B1)

W2 = tf.Variable(tf.random_normal([10, 1]))
B2 = tf.Variable(tf.zeros([1, 1]) + 0.1)
prediction = tf.add(tf.matmul(out1, W2), B2, name="model")

loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for i in range(40):
    sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
    print(sess.run(loss, feed_dict={xs: x_data, ys: y_data})) 
re = sess.run(prediction, feed_dict={xs: x_test})
print(re)
for x in re:
    if x[0] > 0.5:
        print(1)
    else:
        print(0)

tf.saved_model.simple_save(sess, "./saved_model", inputs={"x": xs, }, outputs={"model": prediction, })

2 个答案:

答案 0 :(得分:1)

最后,我放弃了,因为最新版本已删除了loadFrozenModel,并且支持很少。我尝试使用keras模型,并且有效。但是,我仍然希望有人能告诉我为什么我的tf模型无法转换为tfjs模型。

答案 1 :(得分:0)

只需添加

tf.enable_resource_variables()

初始化x_data

之前

并使用此命令进行转换

tensorflowjs_converter --input_format=tf_saved_model --output_format=tfjs_graph_model ./saved_model ./web_model