3 votes

Découpage du tenseur de Theano... comment utiliser le booléen pour découper ?

En numpy, si j'ai un tableau booléen, je peux l'utiliser pour sélectionner les éléments d'un autre tableau :

>>> import numpy as np
>>> x = np.array([1, 2, 3])
>>> idx = np.array([True, False, True])
>>> x[idx] 
array([1, 3])

J'ai besoin de faire cela dans Theano. C'est ce que j'ai essayé, mais j'ai obtenu un résultat inattendu.

>>> from theano import tensor as T
>>> x = T.vector()
>>> idx = T.ivector()
>>> y = x[idx]
>>> y.eval({x: np.array([1,2,3]), idx: np.array([True, False, True])})
array([ 2.,  1.,  2.])

Quelqu'un peut-il expliquer le résultat de Theano et suggérer comment obtenir le résultat de Numpy ? J'ai besoin de savoir comment faire cela afin d'instancier correctement un argument 'givens' dans une déclaration de fonction theano. Merci d'avance.

4voto

Eric Points 36290

C'est non supporté dans l'océan :

Nous ne prenons pas en charge les masques booléens, car Theano ne possède pas de type booléen (nous utilisons int8 pour la sortie des opérateurs logiques).

Indexation de Theano avec un "masque" (approche incorrecte) :

>>> t = theano.tensor.arange(9).reshape((3,3))
>>> t[t > 4].eval()  # an array with shape (3, 3, 3)
...

Obtenir un résultat de Theano comme NumPy :

>>> t[(t > 4).nonzero()].eval()
array([5, 6, 7, 8])

Donc vous avez besoin y = x[idx.nonzero()]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X