0

我目前正在尝试让训练有素的 TF seq2seq 模型与 Tensorflow.js 一起使用。我需要为此获取 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:节点变量/分配的输入 0 从变量传递 int32:0 与预期的 int32_ref 不兼容。

我遇到的问题之一是我真的不知道如何解决这个问题。所以我希望你们中的一个人可能有一些指导,或者你知道我的问题可能是什么。

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

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

任何帮助将不胜感激!

4

1 回答 1

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
于 2018-08-22T17:51:24.493 回答