来自张量流的tf.contrib.layers.embedding_column

use*_*890 5 python embedding tensorflow

我正在通过tensorflow教程tensorflow.我想找到以下行的描述:

tf.contrib.layers.embedding_column
Run Code Online (Sandbox Code Playgroud)

我想知道它是否使用word2vec或其他任何东西,或者我正在考虑完全错误的方向.我试图点击GibHub,但一无所获.我猜测看GitHub并不容易,因为python可能会引用一些C++库.有人能指出我正确的方向吗?

小智 6

我一直在想这个.我不清楚他们在做什么,但这就是我发现的.

关于广泛和深度学习论文中,他们将嵌入向量描述为随机初始化,然后在训练期间进行调整以最小化误差.

通常,当您进行嵌入时,您需要对数据进行一些任意的矢量表示(例如一个热矢量),然后将其乘以表示嵌入的矩阵.该矩阵可以通过PCA或通过t-SNE或word2vec之类的训练找到.

embedding_column的实际代码在这里,它实现为一个名为_EmbeddingColumn的类,它是_FeatureColumn的子类.它将嵌入矩阵存储在其sparse_id_column属性中.然后,方法to_dnn_input_layer应用该嵌入矩阵以产生下一层的嵌入.

 def to_dnn_input_layer(self,
                         input_tensor,
                         weight_collections=None,
                         trainable=True):
    output, embedding_weights = _create_embedding_lookup(
        input_tensor=self.sparse_id_column.id_tensor(input_tensor),
        weight_tensor=self.sparse_id_column.weight_tensor(input_tensor),
        vocab_size=self.length,
        dimension=self.dimension,
        weight_collections=_add_variable_collection(weight_collections),
        initializer=self.initializer,
        combiner=self.combiner,
        trainable=trainable)
Run Code Online (Sandbox Code Playgroud)

因此,据我所见,似乎嵌入是通过将您正在使用的任何学习规则(梯度下降等)应用于嵌入矩阵而形成的.