Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Transformations | Tenseurs
Introduction à TensorFlow

bookTransformations

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).
1234567891011121314
import 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)
copy
Note
Remarque

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.
12345678910111213
import 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)
copy
Note
Remarque

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.
12345678910111213
import 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)
copy
Note
Remarque
  • 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 de 1 fait référence aux colonnes (horizontalement).
123456789101112131415161718
import 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)
copy
Note
Remarque
  • 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.
Tâche

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

  1. 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.
  2. 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.

  3. 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 :

  1. 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 dans main_dataset par les lignes de error_correction_data.
  2. Intégration des nouvelles données :

    • Concaténez main_dataset avec additional_data pour intégrer les nouveaux relevés.
  3. 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.

Solution

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 11
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 5.56

bookTransformations

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).
1234567891011121314
import 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)
copy
Note
Remarque

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.
12345678910111213
import 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)
copy
Note
Remarque

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.
12345678910111213
import 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)
copy
Note
Remarque
  • 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 de 1 fait référence aux colonnes (horizontalement).
123456789101112131415161718
import 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)
copy
Note
Remarque
  • 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.
Tâche

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

  1. 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.
  2. 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.

  3. 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 :

  1. 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 dans main_dataset par les lignes de error_correction_data.
  2. Intégration des nouvelles données :

    • Concaténez main_dataset avec additional_data pour intégrer les nouveaux relevés.
  3. 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.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 11
single

single

some-alt