Contenu du cours
Introduction à TensorFlow
Introduction à TensorFlow
Transformations
Transformations de Tenseurs
Bienvenue de retour ! Aujourd'hui, nous allons plonger plus profondément dans des opérations plus avancées : la transformation des tenseurs.
Les transformations de tenseurs sont cruciales lorsque vous travaillez avec des données. À mesure que vous vous enfoncez davantage dans les tâches d'apprentissage profond et de science des données, vous constaterez que les données avec lesquelles vous traitez ne sont pas toujours dans le format dont vous avez besoin. Cette leçon vous présentera des méthodes dans TensorFlow qui vous permettent de manipuler la structure et le contenu des tenseurs pour répondre à vos besoins.
Remodelage des Tenseurs
Lorsque vous travaillez avec des tenseurs, il y a des moments où vous aurez besoin de changer la forme sans altérer les données sous-jacentes. tf.reshape()
est utile dans de tels moments.
Comment ça fonctionne :
- Le remodelage change la structure du tenseur, mais pas ses données. Le nombre total d'éléments avant et après le remodelage doit rester le même;
- Il fonctionne en "remplissant" la nouvelle forme ligne par ligne (de gauche à droite, de haut en bas).
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)
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.Cela est particulièrement utile lorsque vous souhaitez alimenter des tenseurs dans un réseau de neurones mais que les dimensions ne correspondent pas à la forme d'entrée du réseau.
Découpage
Le découpage vous aide à extraire une partie d'un tenseur. C'est analogue au découpage de liste en Python mais étendu aux tenseurs multidimensionnels.
Comment ça fonctionne :
tf.slice()
extrait une tranche d'un tenseur. Il nécessite l'indice de départ pour la tranche et la taille de la tranche ;- Si la taille est
-1
, cela signifie tous les éléments dans cette dimension.
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)
Remarque
Rappelez-vous toujours de l'indexation basée sur zéro de TensorFlow, qui est similaire à l'indexation native de Python.
Modification des données
Il existe une autre manière de découper qui vous permet également de modifier les données originales, similaire au découpage de tableaux dans NumPy.
Comment ça fonctionne :
- En utilisant
[]
, vous pouvez facilement découper et indexer les tenseurs, semblable au découpage NumPy. Cette approche vous permet de sélectionner des lignes, colonnes ou éléments spécifiques d'un tenseur ; - Avec
tf.Variable()
, le tenseur devient mutable, permettant des modifications directes en utilisant le découpage ; - Pour modifier les valeurs du sous-tenseur sélectionné, utilisez la méthode
.assign()
avec un tenseur ou une liste qui correspond à sa forme.
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)
Remarque
- La syntaxe de découpage dans TensorFlow est largement inspirée de NumPy, donc si vous êtes familier avec NumPy, la transition vers le mécanisme de découpage de TensorFlow est simple ;
- Assurez-vous toujours d'utiliser
tf.Variable()
pour toutes les opérations nécessitant la mutabilité des tenseurs.
Concaténation
La concaténation vous permet de joindre plusieurs tenseurs le long d'un axe spécifié.
Comment cela fonctionne :
tf.concat()
combine les tenseurs. La méthode nécessite une liste de tenseurs que vous souhaitez concaténer et l'axe le long duquel effectuer l'opération;- L'axe est basé sur zéro. Un axe de
0
fait référence aux lignes (verticalement) et un axe de1
fait référence aux colonnes (horizontalement).
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)
Remarque
- Assurez-vous que les tenseurs que vous rejoignez ont des dimensions correspondantes sur les axes non concaténés ;
- Cette opération est similaire à
numpy.concatenate()
, mais adaptée pour les tenseurs TensorFlow.
Swipe to start coding
Contexte
Vous travaillez sur un ensemble de données composé de relevés de divers capteurs placés à différents 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 incorrectement.
Vous avez également reçu de nouveaux relevés d'autres capteurs que vous devez inclure.
Informations sur l'ensemble de données
-
main_dataset
: Un tenseur de forme(6, 4)
représentant 6 relevés. Chaque ligne est 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 les données erronées dans l'ensemble de données principal. -
additional_data
: Un tenseur de forme(3, 4)
représentant 3 nouveaux relevés.
Objectif
Préparer un ensemble de données corrigé et complet pour la prévision météorologique :
-
Correction des données :
- Vous avez découvert que les relevés des 2ème et 5ème lignes du
main_dataset
étaient inexacts. Remplacez ces lignes dans lemain_dataset
par les lignes deerror_correction_data
.
- Vous avez découvert que les relevés des 2ème et 5ème lignes du
-
Incorporer des données supplémentaires :
- Concaténez le
main_dataset
avecadditional_data
pour incorporer les nouveaux relevés.
- Concaténez le
-
Restructuration par lots :
- Pour le besoin de l'entraînement par lots, vous souhaitez diviser l'ensemble de données en lots avec 3 relevés par lot. Restructurez
complete_dataset
, où la première dimension représente la taille du lot, et la deuxième dimension représente le nombre de relevés par lot.
- Pour le besoin de l'entraînement par lots, vous souhaitez diviser l'ensemble de données en lots avec 3 relevés par lot. Restructurez
Solution
Merci pour vos commentaires !
Transformations
Transformations de Tenseurs
Bienvenue de retour ! Aujourd'hui, nous allons plonger plus profondément dans des opérations plus avancées : la transformation des tenseurs.
Les transformations de tenseurs sont cruciales lorsque vous travaillez avec des données. À mesure que vous vous enfoncez davantage dans les tâches d'apprentissage profond et de science des données, vous constaterez que les données avec lesquelles vous traitez ne sont pas toujours dans le format dont vous avez besoin. Cette leçon vous présentera des méthodes dans TensorFlow qui vous permettent de manipuler la structure et le contenu des tenseurs pour répondre à vos besoins.
Remodelage des Tenseurs
Lorsque vous travaillez avec des tenseurs, il y a des moments où vous aurez besoin de changer la forme sans altérer les données sous-jacentes. tf.reshape()
est utile dans de tels moments.
Comment ça fonctionne :
- Le remodelage change la structure du tenseur, mais pas ses données. Le nombre total d'éléments avant et après le remodelage doit rester le même;
- Il fonctionne en "remplissant" la nouvelle forme ligne par ligne (de gauche à droite, de haut en bas).
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)
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.Cela est particulièrement utile lorsque vous souhaitez alimenter des tenseurs dans un réseau de neurones mais que les dimensions ne correspondent pas à la forme d'entrée du réseau.
Découpage
Le découpage vous aide à extraire une partie d'un tenseur. C'est analogue au découpage de liste en Python mais étendu aux tenseurs multidimensionnels.
Comment ça fonctionne :
tf.slice()
extrait une tranche d'un tenseur. Il nécessite l'indice de départ pour la tranche et la taille de la tranche ;- Si la taille est
-1
, cela signifie tous les éléments dans cette dimension.
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)
Remarque
Rappelez-vous toujours de l'indexation basée sur zéro de TensorFlow, qui est similaire à l'indexation native de Python.
Modification des données
Il existe une autre manière de découper qui vous permet également de modifier les données originales, similaire au découpage de tableaux dans NumPy.
Comment ça fonctionne :
- En utilisant
[]
, vous pouvez facilement découper et indexer les tenseurs, semblable au découpage NumPy. Cette approche vous permet de sélectionner des lignes, colonnes ou éléments spécifiques d'un tenseur ; - Avec
tf.Variable()
, le tenseur devient mutable, permettant des modifications directes en utilisant le découpage ; - Pour modifier les valeurs du sous-tenseur sélectionné, utilisez la méthode
.assign()
avec un tenseur ou une liste qui correspond à sa forme.
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)
Remarque
- La syntaxe de découpage dans TensorFlow est largement inspirée de NumPy, donc si vous êtes familier avec NumPy, la transition vers le mécanisme de découpage de TensorFlow est simple ;
- Assurez-vous toujours d'utiliser
tf.Variable()
pour toutes les opérations nécessitant la mutabilité des tenseurs.
Concaténation
La concaténation vous permet de joindre plusieurs tenseurs le long d'un axe spécifié.
Comment cela fonctionne :
tf.concat()
combine les tenseurs. La méthode nécessite une liste de tenseurs que vous souhaitez concaténer et l'axe le long duquel effectuer l'opération;- L'axe est basé sur zéro. Un axe de
0
fait référence aux lignes (verticalement) et un axe de1
fait référence aux colonnes (horizontalement).
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)
Remarque
- Assurez-vous que les tenseurs que vous rejoignez ont des dimensions correspondantes sur les axes non concaténés ;
- Cette opération est similaire à
numpy.concatenate()
, mais adaptée pour les tenseurs TensorFlow.
Swipe to start coding
Contexte
Vous travaillez sur un ensemble de données composé de relevés de divers capteurs placés à différents 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 incorrectement.
Vous avez également reçu de nouveaux relevés d'autres capteurs que vous devez inclure.
Informations sur l'ensemble de données
-
main_dataset
: Un tenseur de forme(6, 4)
représentant 6 relevés. Chaque ligne est 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 les données erronées dans l'ensemble de données principal. -
additional_data
: Un tenseur de forme(3, 4)
représentant 3 nouveaux relevés.
Objectif
Préparer un ensemble de données corrigé et complet pour la prévision météorologique :
-
Correction des données :
- Vous avez découvert que les relevés des 2ème et 5ème lignes du
main_dataset
étaient inexacts. Remplacez ces lignes dans lemain_dataset
par les lignes deerror_correction_data
.
- Vous avez découvert que les relevés des 2ème et 5ème lignes du
-
Incorporer des données supplémentaires :
- Concaténez le
main_dataset
avecadditional_data
pour incorporer les nouveaux relevés.
- Concaténez le
-
Restructuration par lots :
- Pour le besoin de l'entraînement par lots, vous souhaitez diviser l'ensemble de données en lots avec 3 relevés par lot. Restructurez
complete_dataset
, où la première dimension représente la taille du lot, et la deuxième dimension représente le nombre de relevés par lot.
- Pour le besoin de l'entraînement par lots, vous souhaitez diviser l'ensemble de données en lots avec 3 relevés par lot. Restructurez
Solution
Merci pour vos commentaires !