我最近發生的被調試word2vec_basic.py並作一個簡單的數據集例如「狗眼看貓狗追貓,貓爬上了樹」,dictionary
是{'the': 0, 'cat': 1, 'dog': 2, 'a': 3, 'saw': 4, 'chased': 5, 'climbed': 6, 'tree': 7}
,reverse_dictionary
是{0: 'the', 1: 'cat', 2: 'dog', 3: 'a', 4: 'saw', 5: 'chased', 6: 'climbed', 7: 'tree'}
。
當的batch_size = 8,skip_window = 1,embedding_size = 1,和num_skips = 2,主叫generate_batch
返回: batch: [2 2 4 4 3 3 1 1] labels: [[0] [4] [2] [3] [4] [1] [0] [3]]
翻譯爲詞,它們是: batch: [dog, dog, saw, saw, a, a, cat, cat] labels: [[the], [saw], [dog], [a], [saw], [cat], [the], [a]]
對於第三個字「dog saw」in the data set,as skip_window is 1,expected(target,context)pairs should be(dog,the)and(dog,saw) - 詳情請參見https://www.tensorflow.org/tutorials/word2vec中的「Skip-gram模型」如果需要的話。
至於爲什麼1 [batch_size, 1]
被使用,在該https://www.tensorflow.org/api_docs/python/tf/nn/nce_lossnce_loss
文檔說「標籤:類型的int64的張量和形狀[batch_size時,num_true]的目標類。」。和「num_true:一個int。每個訓練示例的目標類的數量」。 (num_true有一個默認值1)
並在代碼中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
和train_labels
有意義的形狀。
只是爲了澄清一下,爲什麼在這種情況下標籤的形狀是[batch_size,1]而不是[batch_size]? – com
我不確定。也許有一些地方必須乘以一個1xn大小的矩陣。 – Aaron