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!
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)
sigmoid(tensor) * 255
devrait le faire.
Selon le redimensionnement sur Wikipedia, vous pouvez également essayer le dimensionnement à la longueur d'unité:
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)