ValueError:节点Variable / Assign的输入0已从变量0传递给int32,与预期的int32_ref

时间:2018-08-19 14:13:52

标签: tensorflow tensorflow-serving tensorflowjs-converter

我目前正在尝试使用Tensorflow.js获得训练有素的TF seq2seq模型。我需要为此获取json文件。我的输入是几句话,输出是“嵌入”。当我在检查点中读取时,此模型正在运行,但是无法将其转换为tf.js。转换过程的一部分是将我最新的检查点冻结为protobuf(pb)文件,然后将其转换为tensorflow.js期望的json格式。

以上是我的理解,并且我以前从未做过,这可能是错误的,因此,如果我从阅读中得出的结论有误,请随时纠正。

当我尝试转换为tensorflow.js格式时,我使用以下命令:

sudo tensorflowjs_converter --input_format=tf_frozen_model 
--output_node_names='embeddings' 
--saved_model_tags=serve 
./saved_model/model.pb /web_model

这将显示此帖子中列出的错误:

  

ValueError:节点Variable / Assign的输入0已从int32传递   变量:0与预期的int32_ref不兼容。

我遇到的问题之一是我真的不确定如何解决此问题。所以我希望也许你们中的一个能得到一些指导,或者您也许知道我的问题所在。

在下面的链接中,我已经升级了用于将检查点文件转换为protobuf的代码。然后我在笔记本的底部添加了该文件的导入,然后提供了与尝试转换为tensorflowjs格式时遇到的相同错误。 (只需滚动到笔记本底部)

https://github.com/xtr33me/textsumToTfjs/blob/master/convert_ckpt_to_pb.ipynb

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

仍然不确定为什么会出现上述错误,但是最终我能够通过通过tf.saved_model切换到使用TF的SavedModel来解决此问题。如果将来有人遇到类似的情况,可以在下面找到一个对我有用的粗略示例。保存完以下模型后,我便可以对其执行tensorflowjs_convert并导出正确的文件。

if first_iter == True: #first time through
    first_iter = False
    #Lets try saving this badboy
    cwd = os.getcwd()
    path = os.path.join(cwd, 'simple')
    shutil.rmtree(path, ignore_errors=True)

    inputs_dict = {
        "batch_decoder_input": tf.convert_to_tensor(batch_decoder_input)
    }
    outputs_dict = {
        "batch_decoder_output": tf.convert_to_tensor(batch_decoder_output)
    }

    tf.saved_model.simple_save(
        sess, path, inputs_dict, outputs_dict
    )
    print('Model Saved')
    #End save model code