【发布时间】:2016-06-23 04:40:19
【问题描述】:
我试图了解word2vec example 的工作原理,但并不真正了解传递给 nse_loss 函数的权重和偏差的目的是什么。该函数有两个变量输入:权重(加上偏差)和嵌入。
# Look up embeddings for inputs.
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
# Construct the variables for the NCE loss
nce_weights = tf.Variable(
tf.truncated_normal([vocabulary_size, embedding_size],
stddev=1.0 / math.sqrt(embedding_size)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
两者都是随机初始化的,并且(据我所知)在学习过程中都会更新。
# Compute the average NCE loss for the batch.
loss = tf.reduce_mean(
tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,
num_sampled, vocabulary_size))
我想他们都应该代表训练有素的模型。然而,权重和偏差以后不再用于相似性计算。相反,只使用了一个组件:
# Compute the cosine similarity between minibatch examples and all embeddings.
norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))
normalized_embeddings = embeddings / norm
valid_embeddings = tf.nn.embedding_lookup(
normalized_embeddings, valid_dataset)
similarity = tf.matmul(
valid_embeddings, normalized_embeddings, transpose_b=True)
那么模型的第二个组件呢?为什么权重和偏见被忽略了?
谢谢。
【问题讨论】:
标签: machine-learning tensorflow deep-learning