在Tensorflow的这个教程文件中 ,find了以下行(第45行)来加载word2vec“extension”:
word2vec = tf.load_op_library(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'word2vec_ops.so'))
我正在使用Windows 10,正如在这个问题中指出的, .so
文件是针对Linux的。
什么是在Windows上加载的等效扩展?
另外,我不明白为什么在安装Tensorflow时包含了这么多的东西,但是Word2Vec必须在本地构build。 在文档中, 在Windows上安装TensorFlow ,没有提到必须构build这些扩展。
这是一个旧的做法,现在已经改变了,一切都随着安装? 如果是这样,那么这个改变如何适用于例子中的word2vec
模块呢?
是的,它已经改变了! Tensorflow现在包含了一个辅助函数tf.nn.embedding_lookup
,可以很容易地嵌入数据。
你可以通过做这样的事情来使用它,即
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)
完整的代码在这里 。
一般来说,我会犹豫过度依赖tensorflow/models
回购。 它的一部分是相当过时的。 主要的tensorflow/tensorflow
回购得到更好的维护。