如何训练随机初始化的嵌入层?

时间:2018-07-24 14:52:56

标签: tensorflow random embedding

我正在使用随机初始化的嵌入制作嵌入层。 我以这种方式进行

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

1 个答案:

答案 0 :(得分:0)

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

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