这个帖子很接近:What is the purpose of weights and biases in tensorflow word2vec example?
但我仍然遗漏了对此的解释:https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/word2vec/word2vec_basic.py
根据我的理解,您可以从网络中获取字典中目标和上下文单词的索引。
_, loss_val = session.run([optimizer, loss], feed_dict=feed_dict)
average_loss += loss_val
然后查找批输入以返回在开头随机生成的向量
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
# Look up embeddings for inputs.
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
然后优化器调整权重和偏差以最佳预测标签,而不是num_sampled随机选择
loss = tf.reduce_mean(
tf.nn.nce_loss(weights=nce_weights,
biases=nce_biases,
labels=train_labels,
inputs=embed,
num_sampled=num_sampled,
num_classes=vocabulary_size))
# Construct the SGD optimizer using a learning rate of 1.0.
optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss)
我的问题如下:
嵌入变量在何处更新?。在我看来,我可以通过神经网络运行一个单词的索引,或者只是采用final_embeddings
向量并使用它来获得最终结果。但是我不明白embeddings
在随机初始化中的变化。
如果我要绘制这个计算图,它会是什么样的(或者更好,实际上最好的方法是什么)?
这是否会立即运行批处理中的所有上下文/目标对?还是一个接一个?
答案 0 :(得分:2)
嵌入:嵌入是一个变量。每次执行backprop时都会更新(同时运行带有丢失的优化器)
Grpah:您是否尝试保存图表并在张量板中显示?这是你在找什么?
批处理:在您链接的示例中,他正在使用第96行的函数进行批处理。https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/word2vec/word2vec_basic.py#L96
如果我误解了你的问题,请纠正我。