我对使用预训练的 word2vec 初始化tensorflow seq2seq 实现感兴趣。
我已经看过代码了。嵌入似乎已初始化
with tf.variable_scope(scope or "embedding_attention_decoder"):
with tf.device("/cpu:0"):
embedding = tf.get_variable("embedding", [num_symbols, cell.input_size])
我如何更改它以使用预训练的 word2vec 进行初始化?
我想您已经在邮件列表中得到了答案,但我将其放在这里供后代使用。
https://groups.google.com/a/tensorflow.org/forum/#!topic/discuss/bH6S98NpIJE https://groups.google.com/a/tensorflow.org/forum/#!topic/discuss/bH6S98NpIJE
您可以随机初始化它,然后执行以下操作:
会话.运行(嵌入.分配(my_word2vec_matrix))
这将覆盖初始值。
这似乎对我有用。我相信trainable=False
需要保持值固定吗?
# load word2vec model (say from gensim)
model = load_model(FILENAME, binary=True)
# embedding matrix
X = model.syn0
print(type(X)) # numpy.ndarray
print(X.shape) # (vocab_size, embedding_dim)
# start interactive session
sess = tf.InteractiveSession()
# set embeddings
embeddings = tf.Variable(tf.random_uniform(X.shape, minval=-0.1, maxval=0.1), trainable=False)
# initialize
sess.run(tf.initialize_all_variables())
# override inits
sess.run(embeddings.assign(X))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)