我是TensorFlow,word2vec和神经网络的新手,我正在努力了解它们。我正在研究这个TensorFlow教程:https://www.tensorflow.org/tutorials/word2vec。我为这个教程运行了word2vec_optimized.py代码:https://github.com/tensorflow/models/blob/master/tutorials/embedding/word2vec_optimized.py。当教程代码完成运行时,它会输出一个保存的TensorFlow模型。我试图看看我是否可以重新加载模型并使用它来进行单词比较,即法国是在巴黎,因为俄罗斯是在莫斯科。
我在教程代码中看到有一个可用于此的类比方法:
def analogy(self, w0, w1, w2):
"""Predict word w3 as in w0:w1 vs w2:w3."""
wid = np.array([[self._word2id.get(w, 0) for w in [w0, w1, w2]]])
idx = self._predict(wid)
for c in [self._id2word[i] for i in idx[0, :]]:
if c not in [w0, w1, w2]:
print(c)
break
print("unknown")
但首先,我需要重新加载已保存的模型,我在主要方法中执行此操作:
def main(_):
with tf.Graph().as_default(), tf.Session() as session:
with tf.device("/cpu:0"):
model = tf.train.import_meta_graph('model.ckpt.meta')
model.restore(session, tf.train.latest_checkpoint('/results/'))
model.analogy(b'france', b'paris', b'russia')
这会导致以下错误:
Traceback (most recent call last):
File "./word2vec_test.py", line 539, in <module>
tf.app.run()
File "/util/opt/anaconda/2.2/envs/tensorflow-1.0.0/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 44, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "./embedding_tutorial/embedding/word2vec_test.py", line 534, in main
model.analogy(b'france', b'paris', b'russia')
AttributeError: 'Saver' object has no attribute 'analogy'
如何加载已保存的模块并使用它来调用类比方法?我将我的main方法放在与模拟方法相同的文件中。
答案 0 :(得分:0)
我认为问题是analogy()
是类Word2Vec
的方法,但是您没有将model
实例化为该类型的对象。
试试这个:
opts = Options()
with tf.Graph().as_default(), tf.Session() as session:
with tf.device("/cpu:0"):
model = Word2Vec(opts, session)
model.saver = tf.train.import_meta_graph('/path/to/model.ckpt.meta')
model.saver.restore(session,
tf.train.latest_checkpoint('/path/to/results/'))
model.analogy(b'france', b'paris', b'russia')
或者实际上,如果您在训练时使用--interactive,则在训练结束后,您将使用ipython进入interactive mode。