Tensorflow word2vec InvalidArgumentError:Assign需要两个张量的形状匹配

时间:2018-04-21 16:10:58

标签: tensorflow word2vec

我正在使用this代码来训练word2vec模型。我正在尝试使用saver.restore()逐步训练它。我在恢复模型后使用新数据。由于旧数据和新数据的词汇量大小不一样,我得到了这样的例外:

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [28908,200] rhs shape= [71291,200]

此处71291是旧数据的词汇量大小,28908是新数据。

它从train_data文件here获取词汇单词,并使用词汇表的大小构建网络模型。我认为如果我可以为我的旧数据和新数据设置相同的词汇量,我可以解决这个问题。

所以,我的问题是:我可以在这段代码中这样做吗?据我了解,我无法达到skipgram_word2vec()功能。

或者,除了我的想法之外,还有其他方法可以在此代码中解决此问题吗?如果无法使用此代码,我将尝试其他方式用于我的目的。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

看了word2vec_optimized.py的来源,我说你需要在那里更改代码。它通过直接打开文本文件来操作,并且#34;训练数据"。为了您的目的,您必须更改build_graph方法,并允许它获取设置所有数据的选项(单词,计数,words_per_epoch,current_epoch,total_words_processed,示例,标签,opts.vocab_words,opts.vocab_counts, opts.words_per_epoch)初始化时,而不是文本文件。

然后您需要合并两个文本文件,并加载一次,以生成词汇表。然后保存上面的所有数据,并在每次后续运行时使用它来恢复网络。

如果您使用的文本超过2个,则需要在第一个数据中包含您计划使用的所有文本以生成词汇表。