Transformations
Transformations de tenseurs
Cette leçon explore les opérations avancées de transformation des tenseurs.
Les transformations de tenseurs sont essentielles lors de la gestion des données. En approfondissant l'apprentissage profond et les tâches de science des données, il devient évident que les données rencontrées ne sont pas toujours dans le format souhaité. Cette leçon présente des méthodes dans TensorFlow permettant la manipulation de la structure et du contenu des tenseurs afin de répondre à des exigences spécifiques.
Remodelage des tenseurs
Lors de la manipulation de tenseurs, il est parfois nécessaire de modifier la forme sans altérer les données sous-jacentes. tf.reshape()
est utile dans ces situations.
Fonctionnement :
- Le remodelage modifie la structure du tenseur, mais pas ses données. Le nombre total d’éléments avant et après le remodelage doit rester identique ;
- L’opération "remplit" la nouvelle forme ligne par ligne (de gauche à droite, de haut en bas).
1234567891011121314import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Lors de la spécification de la nouvelle forme, une dimension peut être -1
. TensorFlow calculera la taille de cette dimension afin que la taille totale reste constante.
Ceci est particulièrement utile lorsque vous souhaitez fournir des tenseurs à un réseau de neurones mais que les dimensions ne correspondent pas à la forme d'entrée du réseau.
Découpage (Slicing)
Le découpage vous permet de récupérer une portion d'un tenseur. Cela est analogue au découpage de listes en Python, mais étendu aux tenseurs multidimensionnels.
Fonctionnement :
tf.slice()
extrait une tranche d'un tenseur. Elle nécessite l'indice de départ pour la tranche et la taille de la tranche ;- Si la taille est
-1
, cela indique tous les éléments dans cette dimension.
12345678910111213import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Toujours garder à l'esprit l'indexation à partir de zéro de TensorFlow, similaire à l'indexation native de Python. Utile pour extraire des caractéristiques ou des points de données spécifiques à partir d'un ensemble de données plus large.
Modification des données
Il existe une autre méthode de découpage qui permet également de modifier les données originales, similaire au découpage des tableaux dans NumPy.
Fonctionnement :
- En utilisant
[]
, il est possible de découper et d'indexer facilement les tenseurs, à la manière du découpage NumPy. Cette méthode permet de sélectionner des lignes, colonnes ou éléments spécifiques d'un tenseur ; - Avec
tf.Variable()
, le tenseur devient mutable, ce qui autorise des modifications directes via le découpage ; - Pour modifier les valeurs du sous-tenseur sélectionné, utiliser la méthode
.assign()
avec un tenseur ou une liste ayant la même forme.
12345678910111213import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
- La syntaxe de découpage (slicing) dans TensorFlow s'inspire largement de NumPy ; ainsi, si vous maîtrisez NumPy, la transition vers le mécanisme de découpage de TensorFlow est simple.
- Toujours utiliser
tf.Variable()
pour toute opération nécessitant la mutabilité d'un tenseur.
Concaténation
La concaténation permet de joindre plusieurs tenseurs le long d'un axe spécifié.
Fonctionnement :
tf.concat()
combine des tenseurs. Cette méthode nécessite une liste de tenseurs à concaténer ainsi que l'axe sur lequel effectuer l'opération ;- L'axe est basé sur l'indexation à partir de zéro. Un axe de
0
fait référence aux lignes (verticalement) et un axe de1
fait référence aux colonnes (horizontalement).
123456789101112131415161718import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
- Veiller à ce que les tenseurs à concaténer aient des dimensions correspondantes sur les axes non concaténés ;
- Cette opération est similaire à
numpy.concatenate()
, mais adaptée aux tenseurs TensorFlow.
Swipe to start coding
Contexte
Vous travaillez sur un jeu de données composé de relevés provenant de différents capteurs placés à divers emplacements géographiques. Ces capteurs enregistrent des données météorologiques telles que la température, la pression et les coordonnées géographiques normalisées.
Cependant, lors de la compilation des relevés, vous avez constaté que certaines données ont été enregistrées de manière incorrecte.
Vous avez également reçu de nouveaux relevés provenant d'autres capteurs que vous devez intégrer.
Informations sur le jeu de données
-
main_dataset
: Un tenseur de forme(6, 4)
représentant 6 relevés. Chaque ligne correspond à un échantillon, et les colonnes représentent les caractéristiques suivantes :- Température (en Celsius) ;
- Pression (en hPa) ;
- Coordonnée de latitude normalisée ;
- Coordonnée de longitude normalisée.
-
error_correction_data
: Un tenseur de forme(2, 4)
représentant 2 relevés corrigés pour des données erronées dans le jeu de données principal. -
additional_data
: Un tenseur de forme(3, 4)
représentant 3 nouveaux relevés.
Objectif
Préparer un jeu de données corrigé et complet pour la prédiction météorologique :
-
Correction des données :
- Vous avez découvert que les relevés des 2ème et 5ème lignes de
main_dataset
étaient inexacts. Remplacez ces lignes dansmain_dataset
par les lignes deerror_correction_data
.
- Vous avez découvert que les relevés des 2ème et 5ème lignes de
-
Intégration des nouvelles données :
- Concaténez
main_dataset
avecadditional_data
pour intégrer les nouveaux relevés.
- Concaténez
-
Restructuration en lots :
- Pour l'entraînement par lots, vous souhaitez diviser le jeu de données en lots de 3 relevés par lot. Redimensionnez
complete_dataset
, où la première dimension représente la taille du lot et la seconde le nombre de relevés par lot.
- Pour l'entraînement par lots, vous souhaitez diviser le jeu de données en lots de 3 relevés par lot. Redimensionnez
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Can you explain more about how tf.reshape() works?
What happens if I try to reshape a tensor to an incompatible shape?
Can you give more examples of slicing and modifying tensors?
Awesome!
Completion rate improved to 5.56
Transformations
Glissez pour afficher le menu
Transformations de tenseurs
Cette leçon explore les opérations avancées de transformation des tenseurs.
Les transformations de tenseurs sont essentielles lors de la gestion des données. En approfondissant l'apprentissage profond et les tâches de science des données, il devient évident que les données rencontrées ne sont pas toujours dans le format souhaité. Cette leçon présente des méthodes dans TensorFlow permettant la manipulation de la structure et du contenu des tenseurs afin de répondre à des exigences spécifiques.
Remodelage des tenseurs
Lors de la manipulation de tenseurs, il est parfois nécessaire de modifier la forme sans altérer les données sous-jacentes. tf.reshape()
est utile dans ces situations.
Fonctionnement :
- Le remodelage modifie la structure du tenseur, mais pas ses données. Le nombre total d’éléments avant et après le remodelage doit rester identique ;
- L’opération "remplit" la nouvelle forme ligne par ligne (de gauche à droite, de haut en bas).
1234567891011121314import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Lors de la spécification de la nouvelle forme, une dimension peut être -1
. TensorFlow calculera la taille de cette dimension afin que la taille totale reste constante.
Ceci est particulièrement utile lorsque vous souhaitez fournir des tenseurs à un réseau de neurones mais que les dimensions ne correspondent pas à la forme d'entrée du réseau.
Découpage (Slicing)
Le découpage vous permet de récupérer une portion d'un tenseur. Cela est analogue au découpage de listes en Python, mais étendu aux tenseurs multidimensionnels.
Fonctionnement :
tf.slice()
extrait une tranche d'un tenseur. Elle nécessite l'indice de départ pour la tranche et la taille de la tranche ;- Si la taille est
-1
, cela indique tous les éléments dans cette dimension.
12345678910111213import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Toujours garder à l'esprit l'indexation à partir de zéro de TensorFlow, similaire à l'indexation native de Python. Utile pour extraire des caractéristiques ou des points de données spécifiques à partir d'un ensemble de données plus large.
Modification des données
Il existe une autre méthode de découpage qui permet également de modifier les données originales, similaire au découpage des tableaux dans NumPy.
Fonctionnement :
- En utilisant
[]
, il est possible de découper et d'indexer facilement les tenseurs, à la manière du découpage NumPy. Cette méthode permet de sélectionner des lignes, colonnes ou éléments spécifiques d'un tenseur ; - Avec
tf.Variable()
, le tenseur devient mutable, ce qui autorise des modifications directes via le découpage ; - Pour modifier les valeurs du sous-tenseur sélectionné, utiliser la méthode
.assign()
avec un tenseur ou une liste ayant la même forme.
12345678910111213import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
- La syntaxe de découpage (slicing) dans TensorFlow s'inspire largement de NumPy ; ainsi, si vous maîtrisez NumPy, la transition vers le mécanisme de découpage de TensorFlow est simple.
- Toujours utiliser
tf.Variable()
pour toute opération nécessitant la mutabilité d'un tenseur.
Concaténation
La concaténation permet de joindre plusieurs tenseurs le long d'un axe spécifié.
Fonctionnement :
tf.concat()
combine des tenseurs. Cette méthode nécessite une liste de tenseurs à concaténer ainsi que l'axe sur lequel effectuer l'opération ;- L'axe est basé sur l'indexation à partir de zéro. Un axe de
0
fait référence aux lignes (verticalement) et un axe de1
fait référence aux colonnes (horizontalement).
123456789101112131415161718import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
- Veiller à ce que les tenseurs à concaténer aient des dimensions correspondantes sur les axes non concaténés ;
- Cette opération est similaire à
numpy.concatenate()
, mais adaptée aux tenseurs TensorFlow.
Swipe to start coding
Contexte
Vous travaillez sur un jeu de données composé de relevés provenant de différents capteurs placés à divers emplacements géographiques. Ces capteurs enregistrent des données météorologiques telles que la température, la pression et les coordonnées géographiques normalisées.
Cependant, lors de la compilation des relevés, vous avez constaté que certaines données ont été enregistrées de manière incorrecte.
Vous avez également reçu de nouveaux relevés provenant d'autres capteurs que vous devez intégrer.
Informations sur le jeu de données
-
main_dataset
: Un tenseur de forme(6, 4)
représentant 6 relevés. Chaque ligne correspond à un échantillon, et les colonnes représentent les caractéristiques suivantes :- Température (en Celsius) ;
- Pression (en hPa) ;
- Coordonnée de latitude normalisée ;
- Coordonnée de longitude normalisée.
-
error_correction_data
: Un tenseur de forme(2, 4)
représentant 2 relevés corrigés pour des données erronées dans le jeu de données principal. -
additional_data
: Un tenseur de forme(3, 4)
représentant 3 nouveaux relevés.
Objectif
Préparer un jeu de données corrigé et complet pour la prédiction météorologique :
-
Correction des données :
- Vous avez découvert que les relevés des 2ème et 5ème lignes de
main_dataset
étaient inexacts. Remplacez ces lignes dansmain_dataset
par les lignes deerror_correction_data
.
- Vous avez découvert que les relevés des 2ème et 5ème lignes de
-
Intégration des nouvelles données :
- Concaténez
main_dataset
avecadditional_data
pour intégrer les nouveaux relevés.
- Concaténez
-
Restructuration en lots :
- Pour l'entraînement par lots, vous souhaitez diviser le jeu de données en lots de 3 relevés par lot. Redimensionnez
complete_dataset
, où la première dimension représente la taille du lot et la seconde le nombre de relevés par lot.
- Pour l'entraînement par lots, vous souhaitez diviser le jeu de données en lots de 3 relevés par lot. Redimensionnez
Solution
Merci pour vos commentaires !
single