InvalidArgumentError:当前图形与来自检查点的图形不匹配

时间:2018-10-24 20:04:29

标签: python tensorflow tensor transformer

所以我基本上在我的项目https://github.com/Kyubyong/transformer中使用此转换器实现。 它原本是为德语到英语翻译而设计的,但是效果很好,我修改了python处理脚本,以便为我要翻译的语言创建词汇文件。这似乎工作正常。

但是在培训方面,我会遇到以下错误:

  

InvalidArgumentError(请参阅上面的回溯):从中还原   检查点失败。这很可能是由于两者之间的不匹配   当前图和来自检查点的图。请确保   您尚未更改基于检查点的预期图形。   原始错误:

     

分配需要两个张量的形状匹配。 lhs shape = [9796,512]   rhs shape = [9786,512] [[{{node save / Assign_412}} =   分配[T = DT_FLOAT,_class = [“ loc:@ encoder / enc_embed / lookup_table”],   use_locking = true,validate_shape = true,   _device =“ / job:localhost / replica:0 / task:0 / device:CPU:0”](编码器/ enc_embed / lookup_table / Adam_1,   save / RestoreV2:412)]]

现在我不知道为什么会出现上述错误。我还恢复了原始代码,将德语翻译成英语,现在在工作之前,我得到了相同的错误(除了lhs和rhs张量形状当然不同)!

关于为什么会发生这种情况的任何想法?

预先感谢

编辑:这是这里有问题的特定文件,运行时的train.py:https://github.com/Kyubyong/transformer/blob/master/train.py 除了为de和en加载的词汇库是不同的以外,没有任何修改(事实上,它们是词汇库文件,带有单个字母作为单词)。但是,正如我提到的,即使回到以前的工作示例中,我也会在使用不同的lhs和rhs尺寸时遇到相同的错误。

3 个答案:

答案 0 :(得分:1)

我遇到了类似的错误,我的情况似乎是以前失败的作业的输出仍保留在输出目录中,并且在保存/恢复新作业的检查点时存在一些不兼容性,所以我只是清理了输出目录,然后新作业正常工作。

答案 1 :(得分:0)

大量数字几乎可以肯定是您的词汇量。初始矩阵的大小为[vocab_size,hidden_​​dim]。因此,通过更改唱词的大小,您就可以破坏事物。

大概解决方案是确保清除所有检查点,以便仅查看使用所需词汇量训练的模型。

答案 2 :(得分:0)

导出/保存模型时,我遇到了同样的问题。我指的是该URL中提供的示例:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/exporting_models.md

如果您遇到上述问题,必须确保正确的三件事:

  1. 清理模型目录并提取新模型

  2. 确保使用正确的pipeline-config文件对及其对应的TF模型。

  3. 使用正确的模型检查点。参见以下示例:

我将TRAINED_CKPT_PREFIX值更新为模型的保存点,并且对我有效(请参见以下示例):

TRAINED_CKPT_PREFIX=./data/model.ckpt-139

在您的情况下,请使用您的保存点号139

以前,我只是在使用./data/model.ckpt而不起作用。