在Tensorflow的this tutorial file中,找到以下行(第45行)以加载word2vec“extension”:
word2vec = tf.load_op_library(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'word2vec_ops.so'))
我使用的是Windows 10,正如this SO question中指出的那样,.so
- 文件适用于Linux。
在Windows上加载的等效扩展名是什么?
另外,我不明白为什么在安装时Tensorflow中包含了很多其他内容,但必须在本地构建Word2Vec。在文档Installing TensorFlow on Windows中,没有提到必须构建这些扩展。
这是一个旧的做法,现在已经改变,一切都随装置一起提供?如果是,那么该更改如何应用于示例中的word2vec
模块?
答案 0 :(得分:3)
是的,它已经改变了! Tensorflow现在包含一个辅助函数tf.nn.embedding_lookup
,可以很容易地嵌入您的数据。
您可以通过执行this之类的操作来使用它,即
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
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]))
# Placeholders for inputs
train_inputs = tf.placeholder(tf.int32, shape=[batch_size])
train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
# Compute the NCE loss, using a sample of the negative labels each time.
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))
# We use the SGD optimizer.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1.0).minimize(loss)
for inputs, labels in generate_batch(...):
feed_dict = {train_inputs: inputs, train_labels: labels}
_, cur_loss = session.run([optimizer, loss], feed_dict=feed_dict)
完整代码为here。
总的来说,我会犹豫是否过分依赖tensorflow/models
回购。部分内容已经过时了。主tensorflow/tensorflow
回购更好地维护。