我正在使用随机初始化的嵌入制作嵌入层。 我以这种方式进行
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
?
答案 0 :(得分:0)
如您所指出的,为了训练嵌入,您需要将它们指定为tf.Variable
。创建参数时,可以将tf.random_normal
张量传递给initializer
参数。
为了在模型中实际使用它们,可以使用tf.nn.embedding_lookup()
来查找输入数据(应该是整数)。另请参见docs。