【问题标题】:Tensorflow tf.nn.embedding_lookupTensorFlow tf.nn.embedding_lookup
【发布时间】:2017-11-25 11:33:32
【问题描述】:

tf.nn.embedding_lookup 中是否有一个小型神经网络? 当我训练一些数据时,相同索引的值正在发生变化。 那么它也被训练了吗?在我训练我的模型时

我检查了官方的 embedding_lookup 代码,但我看不到任何用于训练嵌入参数的 tf.Variables。 但是当我打印所有 tf​​.Variables 时,我可以找到一个在嵌入范围内的变量

谢谢。

【问题讨论】:

    标签: tensorflow word-embedding embedding-lookup


    【解决方案1】:

    是的,嵌入是学习的。您可以将tf.nn.embedding_lookup 操作视为更有效地执行以下矩阵乘法:

    import tensorflow as tf
    import numpy as np
    
    NUM_CATEGORIES, EMBEDDING_SIZE = 5, 3
    y = tf.placeholder(name='class_idx', shape=(1,), dtype=tf.int32)
    
    RS = np.random.RandomState(42)
    W_em_init = RS.randn(NUM_CATEGORIES, EMBEDDING_SIZE)
    W_em = tf.get_variable(name='W_em',
                           initializer=tf.constant_initializer(W_em_init),
                           shape=(NUM_CATEGORIES, EMBEDDING_SIZE))
    
    # Using tf.nn.embedding_lookup
    y_em_1 = tf.nn.embedding_lookup(W_em, y)
    
    # Using multiplication
    y_one_hot = tf.one_hot(y, depth=NUM_CATEGORIES)
    y_em_2 = tf.matmul(y_one_hot, W_em)
    
    sess = tf.InteractiveSession()
    sess.run(tf.global_variables_initializer())
    sess.run([y_em_1, y_em_2], feed_dict={y: [1.0]})
    # [array([[ 1.5230298 , -0.23415338, -0.23413695]], dtype=float32),
    #  array([[ 1.5230298 , -0.23415338, -0.23413695]], dtype=float32)]
    

    无论您使用y_em_1 还是y_em_2 公式,变量W_em 都将以完全相同的方式进行训练;不过,y_em_1 可能更高效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多