A es un tensorflow.tensor con forma (2261,)

Quiero obtener un nuevo tensor de los siguientes índices de A: [10,20,30]

Intenté todos los siguientes, pero ninguno funciona:

A[[10,20,30]]
# *** ValueError: Index out of range using input dim 1; input has only 1 dims for 'strided_slice' (op: 'StridedSlice') with input shapes: [2261], [3], [3], [3].

A[10,20,30]
# same error as above 

A[numpy.array([10,20,30])]
# *** ValueError: Shape must be rank 1 but is rank 2 for 'strided_slice' (op: 'StridedSlice') with input shapes: [2261], [1,3], [1,3], [1].

A[10]
# <tf.Tensor 'strided_slice:0' shape=() dtype=float32> - not an error but a shapeless tensor

A[tensorflow.constant(10)]
# same problem as above

¿Por qué estos no funcionan y qué puedo hacer?

2
Lior 23 dic. 2016 a las 04:35

3 respuestas

La mejor respuesta
C = tf.nn.embedding_lookup(A, B)

Donde B es un tensor con los valores [10,20,30]

Para referencia: https://www.tensorflow.org/api_docs/python/nn/embeddings

4
jorgemf 23 dic. 2016 a las 04:40

Creo que lo que está buscando es la función de recopilación.

B = tf.constant([10, 20, 30])
tf.gather(A, B)

https://www.tensorflow.org/api_docs/python/tf/gather

3
the pickle 24 mar. 2017 a las 19:46

No creo que todavía se admita una indexación elegante como esta en TensorFlow. Mantenga un ojo en https://github.com/tensorflow/tensorflow/issues/206 para actualizaciones (tal vez hay otro lugar también).

Si desea ver qué es disponible, parece que tienen algo de documentación sobre __tensor.__getitem__.

0
Chris Anderson 23 dic. 2016 a las 03:56