Рассмотрим такой код:Странный вывод embedding_lookup_sparse
w = tf.Variable(tf.constant([[1., 2], [3, 4], [5, 6], [7, 8]]))
sess = tf.Session()
sess.run(tf.initialize_all_variables())
st = tf.SparseTensor([[0, 0, 0],
[0, 1, 1],
[1, 0, 0],
[1, 1, 0],
[2, 0, 0],
[2, 1, 0]], [0, 2, 0, 1, 1, 3], [3, 3, 2])
sess.run(tf.nn.embedding_lookup_sparse(w, st, None, combiner='sum'))
Выход:
array([[ 6., 8.],
[ 4., 6.],
[ 10., 12.]], dtype=float32)
В соответствии с documentation форма выхода должно быть [3, 3, 3], так как форма (SP_ID) = [3, 3, 2] и форма (w) = [4, 3], но это не так :(
Может кто-нибудь объяснить, почему он работает таким образом? Потому что я ожидал поведения простого embedding_lookup, но с агрегация по последним осям.
EDIT
Для каждого объекта у меня есть 2 функции и каждый представляет собой одно слово, так что я хочу представить каждый объект с двумя Concat вложениями, я могу сделать это:
sess.run(tf.reshape(tf.nn.embedding_lookup(w, [[0, 1], [2, 3]]), shape=(2, 4)))
Выход
array([[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.]], dtype=float32)
Итак, теперь у меня все еще есть 2 функции, но каждый может быть представлен несколькими словами, и я хочу объединить вложения для слов, соответствующих одной функции. Похоже, что embedding_lookup_sparse должен работать таким образом, но я не понимаю, почему мой код не работает.
Спасибо!
Каков ожидаемый выход во втором случае? – drpng
Я ожидаю, что [[[1, 2], [3, 4]], [[1, 2], [1, 2]], [[1, 2], [1, 2]]] ' –