【问题标题】:How do I train a randomly initialised embedding layer?如何训练随机初始化嵌入层?
【发布时间】:2018-07-24 14:52:56
【问题描述】:

我正在制作一个带有随机初始化嵌入的嵌入层。 我是这样处理的

import tensorflow as tf

vocab_size = 10
embed_dim = 4

# input tokens
mapping_strings = tf.constant(["hello", "lake", "palmer"])

table = tf.contrib.lookup.string_to_index_table_from_tensor(mapping=mapping_strings, 
                                                            num_oov_buckets=1,
                                                            default_value=-1)

# ids for each token
ids = table.lookup(mapping_strings)

embedding_matrix = tf.random_normal(name="embedding_matrix", dtype=tf.float32, 
                                    shape=[vocab_size, embed_dim])

# embedding for each id
embedded_inputs = tf.nn.embedding_lookup(embedding_matrix, ids)

with tf.Session() as sess:
    table.init.run()
    print(sess.run(embedded_inputs))

这可行并给了我预期的输出,但我希望稍后训练这些随机初始化的嵌入。权重和偏差在哪里设置?为了学习嵌入,将如何执行反向传播?另外,tf.random_normal 是给我一个 embedding_matrix 的随机变量还是我应该使用 tf.Variable

【问题讨论】:

    标签: tensorflow random embedding


    【解决方案1】:

    正如您所指出的,为了训练嵌入,您需要将它们指定为 tf.Variable。您可以在创建时将 tf.random_normal 张量传递给 initializer 参数。

    为了在模型中实际使用它们,您可以使用tf.nn.embedding_lookup() 来查找您的输入数据(应该是整数)。另请参阅docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 2021-01-18
      • 2018-06-18
      • 2020-05-29
      • 2020-05-31
      相关资源
      最近更新 更多