我正在学习如何使用TensorFlow构建语音识别的RNN。作为一个开端,我想尝试一些放在TensorFlow页面上的示例模型TF-RNN。
根据建议,通过研究word2vec模型的基本版本代码,理解单词ID如何嵌入到密集表示(向量表示)中。我了解了tf.nn.embedding_lookup
实际上是做什么用的,直到我在TF-RNNptb_word_lm.py
中遇到同样的函数与二维数组一起使用时,就有些不理解了。
我对tf.nn.embedding_lookup
的理解:
给定一个2-d数组params
和一个1-d数组ids
,函数tf.nn.embedding_lookup
从params
中提取行,这些行对应于ids
中给定的索引,它具有返回的输出维度。
我感到困惑的是:
当使用相同的params
和2-d数组ids
时,tf.nn.embedding_lookup
返回3-d数组,而不是2-d数组,这一点我不理解为什么。
我查阅了Embedding Lookup的手册,但我仍然难以理解分区如何工作和返回的结果。我最近尝试了一些简单的例子使用tf.nn.embedding_lookup
,发现每次返回的值都不同。这种行为是由于分区中涉及到的随机性所导致的吗?
请帮我理解 tf.nn.embedding_lookup
是如何工作的,为什么在 word2vec_basic.py
和 ptb_word_lm.py
中都会用到,即使用它的目的是什么?