InvalidArgumentError:当前图与来自检查点的图不匹配
Posted
技术标签:
【中文标题】InvalidArgumentError:当前图与来自检查点的图不匹配【英文标题】:InvalidArgumentError: Mismatch between the current graph and the graph from the checkpoint 【发布时间】:2019-03-29 08:24:33 【问题描述】:所以我基本上在我的项目中使用这个转换器实现:https://github.com/Kyubyong/transformer。 它在最初编写的德语到英语翻译上效果很好,我修改了处理 python 脚本,以便为我想要翻译的语言创建词汇文件。这似乎工作正常。
但是,在培训方面,我收到以下错误:
InvalidArgumentError(参见上面的回溯):从 检查点失败。这很可能是由于两者之间的不匹配 当前图和来自检查点的图。请确保 您没有根据检查点更改预期的图表。 原始错误:
Assign 需要两个张量的形状匹配。 lhs 形状= [9796,512] rhs 形状= [9786,512] [[节点保存/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"](encoder/enc_embed/lookup_table/Adam_1, 保存/恢复V2:412)]]
现在我不知道为什么会出现上述错误。我还恢复到原来的代码从德语翻译成英语,现在我得到了同样的错误(当然除了 lhs 和 rhs 张量形状不同),在它工作之前!
关于为什么会发生这种情况的任何想法?
提前致谢
编辑:这是这里有问题的特定文件,运行时的 train.py:https://github.com/Kyubyong/transformer/blob/master/train.py 除了为 de 和 en 加载的词汇不同(它们实际上是单个字母作为单词的词汇文件)之外,没有任何修改。然而,正如我所提到的,即使回到以前的工作示例,我也会在不同的 lhs 和 rhs 尺寸下得到相同的错误。
【问题讨论】:
你能创建一个minimal verifiable 的例子吗?您是否正在使用Jupyter notebook
来保留状态?
@user49593 嗨,我会这样做并编辑它,谢谢。但与此同时,是的,我相信它一定与它指向一个旧的图模型或其他东西有关。但是我已经重新启动了终端并考虑清除某种缓存,但没有成功:(
@user49593 我刚刚通过github添加了文件的特定链接,不认为创建更短的sn-p是可行的。谢谢
【参考方案1】:
我遇到了类似的错误,我的情况是,以前失败的作业的输出似乎保留在输出目录中,并且在保存/恢复新作业的检查点时存在一些不兼容,所以我只是 清理输出目录,然后新作业正常工作。
【讨论】:
【参考方案2】:几乎可以肯定,你的词汇量很大。初始矩阵的大小为 [vocab_size, hidden_dim]。因此,通过更改词汇的大小,您正在破坏事物。
据推测,解决方案只是确保清除所有检查点,以便只查看使用所需词汇训练的模型。
【讨论】:
【参考方案3】:我在导出/保存模型时遇到了同样的问题。我指的是此 URL 中给出的示例:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/exporting_models.md
如果您遇到上述问题,您必须确保三件事是正确的:
清理模型目录并提取新模型
确保您使用了正确的管道配置文件对及其对应的 TF 模型。
使用正确的模型检查点。请参阅下面的示例:
我将我的 TRAINED_CKPT_PREFIX 值更新为我的模型的保存点,并且它对我有效(参见下面的示例):
TRAINED_CKPT_PREFIX=./data/model.ckpt-139
在您的情况下,请使用您的储蓄点编号,在我的情况下是 139
以前我只使用./data/model.ckpt
,但它不起作用。
【讨论】:
以上是关于InvalidArgumentError:当前图与来自检查点的图不匹配的主要内容,如果未能解决你的问题,请参考以下文章
InvalidArgumentError:输入必须是向量,得到形状:[]
Tensorflow 中带有 model.fit 的 InvalidArgumentError
InvalidArgumentError: input_1:0 已输入和提取