tensoflow word2vec_basic输入输出占位符

时间:2017-03-08 04:29:38

标签: python machine-learning tensorflow deep-learning word2vec

我是tensorflow的新手。我想了解word2vec_basic脚本。

在开始定义输入和输出时。

train_inputs = tf.placeholder(tf.int32, shape=[batch_size])
train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])

如果我理解了train_inputs的形状 - [batch_size]是一个整数数组,并且数组的长度是batch_size。然后train_labels的形状是[batch_size, 1],它是具有单行的矩阵。正确?如果是,我不明白为什么会这样,以及应该存储在那些占位符中的内容。根据理论,label是一个int,input是上下文滑动窗口的数组,为什么batch_size出现在那里?

似乎我错过了理论中的一些基本内容。我很感激解释。

2 个答案:

答案 0 :(得分:1)

我最近正在调试word2vec_basic.py并且对于一个简单的数据集示例“狗看到了一只猫,猫抓着猫爬上了一棵树”,dictionary{'the': 0, 'cat': 1, 'dog': 2, 'a': 3, 'saw': 4, 'chased': 5, 'climbed': 6, 'tree': 7},{ {1}}是reverse_dictionary

当batch_size = 8,skip_window = 1,embedding_size = 1和num_skips = 2时,调用{0: 'the', 1: 'cat', 2: 'dog', 3: 'a', 4: 'saw', 5: 'chased', 6: 'climbed', 7: 'tree'}返回: generate_batch

翻译成文字,它们是: batch: [2 2 4 4 3 3 1 1] labels: [[0] [4] [2] [3] [4] [1] [0] [3]]

对于数据集中“狗看到”的前三个单词,当skip_window为1时,预期(目标,上下文)对应该是(dog,the)和(dog,saw) - 请参阅“Skip-克模型“在https://www.tensorflow.org/tutorials/word2vec中,如果需要更多细节。

至于 batch: [dog, dog, saw, saw, a, a, cat, cat] labels: [[the], [saw], [dog], [a], [saw], [cat], [the], [a]] 中使用1的原因,https://www.tensorflow.org/api_docs/python/tf/nn/nce_loss处的[batch_size, 1]文档说“标签:int64类型的张量和形状[batch_size,num_true]。目标类“。和“num_true:一个int。每个训练样例的目标类数。” (num_true的默认值为1)

代码中的nce_loss已定义:

nce_loss

所以现在应该很容易看到 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)) train_inputs的形状有意义。

答案 1 :(得分:0)

对于训练,可以方便地并行计算多个句子。这就是batch_size的目的。批处理中的每个单词来自数据中的不同部分,train_labels具有相应的标签。渐变在整个批处理中聚合,然后完成单个参数更新。