web-dev-qa-db-fra.com

Changer l'échelle d'un tenseur en tensorflow

Désolé si j'ai foiré le titre, je ne savais pas comment formuler cela. Quoi qu'il en soit, j'ai un tenseur d'un ensemble de valeurs, mais je veux m'assurer que chaque élément du tenseur a une plage allant de 0 à 255 (ou de 0 à 1, cela fonctionne aussi). Cependant, je ne veux pas faire que toutes les valeurs totalisent 1 ou 255 comme softmax, je veux juste les réduire.

Y a-t-il un moyen de faire ça?

Merci!

9
agupta231

Vous essayez de normaliser les données. Une formule de normalisation classique est celle-ci:

normalize_value = (value − min_value) / (max_value − min_value)

L'implémentation sur tensorflow ressemblera à ceci:

tensor = tf.div(
   tf.subtract(
      tensor, 
      tf.reduce_min(tensor)
   ), 
   tf.subtract(
      tf.reduce_max(tensor), 
      tf.reduce_min(tensor)
   )
)

Toutes les valeurs du tenseur seront entre 0 et 1.

IMPORTANT: assurez-vous que le tenseur a des valeurs float/double, sinon le tenseur de sortie n'aura que des zéros et des uns. Si vous avez un tenseur entier, appelez ceci en premier:

tensor = tf.to_float(tensor)
21
Will Glück

sigmoid(tensor) * 255 devrait le faire.

1
Albert

Selon le redimensionnement sur Wikipedia, vous pouvez également essayer le dimensionnement à la longueur d'unité: 

 enter image description here

Il peut être implémenté en utilisant ce segment de code: 

In [3]: a = tf.constant([2.0, 4.0, 6.0, 1.0, 0])                                                                                                                                                                     
In [4]: b = a / tf.norm(a)
In [5]: b.eval()
Out[5]: array([ 0.26490647,  0.52981293,  0.79471946,  0.13245323,  0.        ], dtype=float32)
1
lerner