import tensorflow as tf
types_lookup_table = tf.get_variable("types_lookup_table", shape=[234, 10],initializer=tf.random_normal_initializer(0, 1), dtype=tf.float32,
trainable=True)
embedding_types = tf.nn.embedding_lookup(types_lookup_table,[[2,3,4],[1,2,3]])
opt = tf.train.GradientDescentOptimizer(0.1)
gradients = tf.gradients(embedding_types, xs=types_lookup_table)
train = opt.apply_gradients([(gradients[0], types_lookup_table)])
with tf.Session() as sess:
tf.global_variables_initializer().run()
h = sess.run(gradients)
print(sess.run(train)) #right
print(sess.run(opt.apply_gradients([(h[0],types_lookup_table)]))). # wrong
我尝试计算tf.nn.embedding_lookup
的渐变,但显示的结果是带有3个元素的 IndexedSliceValue 。
但是相应的渐变(没有sess.run)是一个带有1个元素的indexSliceValue。我不知道为什么。
因此我无法
sess.run(opt.apply_gradients([(h[0],types_lookup_table)])
因为计算值的形状与_types_lookup_table_的形状不匹配,但是,当我没有计算中间值时,直接
sess.run(train) (ps:train = opt.apply_gradients([(gradients, types_lookup_table)]))
没有问题。
但我需要计算中间值并进行添加。我不知道怎么做。 感谢