私は最近word2vec_basic.pyをデバッグするために起こったと単純なデータについては、「犬は犬は猫が木に登った猫を追いかけた猫を見た」の例を設定し、dictionary
はreverse_dictionary
が{0: 'the', 1: 'cat', 2: 'dog', 3: 'a', 4: 'saw', 5: 'chased', 6: 'climbed', 7: 'tree'}
で、{'the': 0, 'cat': 1, 'dog': 2, 'a': 3, 'saw': 4, 'chased': 5, 'climbed': 6, 'tree': 7}
です。
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]]
skip_windowは1であり、期待される(ターゲット、コンテキスト)ペアは(dog、the)と(dog、saw)でなければならない - 詳細については、 "The Skip-gram Model"(https://www.tensorflow.org/tutorials/word2vec)を参照してください。必要に応じて。 1 [batch_size, 1]
に使用されている理由としては
、https://www.tensorflow.org/api_docs/python/tf/nn/nce_lossでnce_loss
ドキュメントは、と言う「のラベル:タイプのInt64のテンソル及び形状【BATCH_SIZE、num_true]ターゲットクラス」 「num_true:An int。1つのトレーニングサンプルあたりのターゲットクラスの数」 (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