Formes de données -- Scalaires, Vecteurs, Matrices, Tenseurs
Dans le monde de l'IA, toutes les données — qu'il s'agisse d'une image, d'un texte ou d'un extrait audio — sont finalement organisées sous une forme unifiée :Tenseur。
Tenseur est un terme général ; selon le nombre de dimensions, il porte différents noms.
De zéro dimension à multidimensionnel : structures de données imbriquées en couches
Une autre façon de le comprendre est l’« imbrication » — un scalaire se trouve au niveau le plus interne ; l’envelopper d’un niveau crée un vecteur, l’envelopper à nouveau crée une matrice, et continuer à l’envelopper crée des tenseurs de dimensions supérieures.
Dans les frameworks d'apprentissage profond tels que PyTorch et TensorFlow, toutes les données sont uniformément représentées sous forme de « tenseurs ».
Un scalaire est un tenseur 0-dimensionnel, un vecteur est un tenseur 1-dimensionnel, et une matrice est un tenseur 2-dimensionnel — ce sont des cas particuliers de tenseurs.
Comprendre les formes de données avec les dimensions
C'est simplement un nombre. Par exemple, une température de 26°C. Dans NumPy, la forme est affichée comme un tuple vide.()。
Une séquence ordonnée de nombres. Par exemple, des relevés de température pour chaque heure d'une journée. La forme est(n,), où n est le nombre d'éléments.
Un tableau avec des lignes et des colonnes. Par exemple, un tableau de températures pour 7 jours par semaine et 24 heures par jour. La forme est(number of rows, number of columns)。
Plusieurs couches de données empilées. Par exemple, les températures pour 300 villes à l'échelle nationale, chaque ville sur 7 jours de la semaine et 24 heures par jour. La forme est(number of cities, number of days, number of hours)i.e.(300, 7, 24)。
Les dimensions peuvent être simplement comprises comme :Combien de « coordonnées » vous faut-il pour identifier un nombre spécifique.
Exemples concrets
Ci-dessous, nous utilisons un scénario progressif pour consolider la compréhension.
Scénario 1 : Enregistrer la température maintenant
Vous n'avez besoin d'écrire qu'un seul nombre :26. C'est unscalaire. Il n'a pas de dimensions ; c'est juste une valeur isolée.
Scénario 2 : Enregistrer les variations de température sur une journée
Vous mesurez une fois par heure, du matin au soir, ce qui donne 24 nombres :[22, 23, 24, 26, 28, ...]。
C'est unvecteur. Vous avez besoin d'une coordonnée (quelle heure) pour repérer une certaine valeur de température.
Scénario 3 : Enregistrer les températures sur une semaine
Vous disposez les sept jours de données dans un tableau : chaque ligne est un jour, chaque colonne est une heure.
Ceci est unematriceà 7 lignes et 24 colonnes. Vous avez besoin de deux coordonnées (quel jour, quelle heure) pour la localiser.
Scénario 4 : Enregistrement des températures dans les villes à l'échelle nationale
Il y a 300 villes dans tout le pays, et chaque ville dispose d'un tableau 7×24.
L'empilement de ces 300 tableaux forme untenseur 3D. Vous avez besoin de trois coordonnées (quelle ville, quel jour, quelle heure).
Définitions mathématiques
Scalaire
Un scalaire est un nombre unique, noté \( a = 26 \), ou \( x \in \mathbb{R} \) (x appartient à l'ensemble des nombres réels).
Vecteur
Un vecteur est un ensemble ordonné de nombres, généralement écrit verticalement (vecteur colonne) :
\[ \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} \in \mathbb{R}^{n} \]\( \mathbb{R}^{n} \) signifie qu'il s'agit d'un vecteur réel à n dimensions, \( v_1 \) est la première composante, et \( v_n \) est la n-ième composante.
Matrix
Une matrice est un tableau rectangulaire à m lignes et n colonnes :
\[ \mathbf{A} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \in \mathbb{R}^{m \times n} \]Elle est notée comme une matrice m×n (m lignes, n colonnes), où \( a_{ij} \) représente l'élément à la i-ème ligne et j-ème colonne.
Tenseur
Un tenseur est une généralisation des vecteurs et des matrices à des dimensions arbitraires.
La forme d’un tenseur à k dimensions est notée \( (d_1, d_2, \dots, d_k) \), avec un total de \( d_1 \times d_2 \times \cdots \times d_k \) éléments.
Tableau de référence rapide des comparaisons
| Name | Dimensions | Exemple de forme | Nombre de coordonnées | Notation mathématique |
|---|---|---|---|---|
| Scalaire | 0 | () | 0 | \( x \in \mathbb{R} \) |
| Vecteur | 1 | (n,) | 1 | \( \mathbf{v} \in \mathbb{R}^{n} \) |
| Matrix | 2 | (m, n) | 2 | \( \mathbf{A} \in \mathbb{R}^{m \times n} \) |
| Tenseur 3D | 3 | (d1, d2, d3) | 3 | \( \mathcal{T} \in \mathbb{R}^{d_1 \times d_2 \times d_3} \) |
Exercice pratique en Python
Ensuite, nous utilisons NumPy pour créer et inspecter ces structures de données.L’attribut shapeest la clé pour comprendre les dimensions des données.
Exemples
# Scalaire (tenseur 0-dimensionnel) : shape = ()
scalar = np.array(26)
# Vecteur (tenseur 1-dimensionnel) : shape = (n,)
vector = np.array([22, 23, 24, 26, 28, 30, 31, 29])
# Matrice (tenseur 2-dimensionnel) : shape = (lignes, colonnes)
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# Tenseur 3D : shape = (couches, lignes, colonnes)
tensor_3d = np.array([[[1,2,3],[4,5,6]], [[7,8,9],[10,11,12]]])
# Tenseur 4D : simulation de 3 images monocanal avec des pixels 2x2
batch_images = np.array([
[[[10],[20]],[[30],[40]]],
[[[50],[60]],[[70],[80]]],
[[[90],[100]],[[110],[120]]]
])
print("Scalaire: shape=", scalar.shape, " ndim=", scalar.ndim)
print("Vector: shape=", vector.shape, " ndim=", vector.ndim)
print("Matrix: shape=", matrix.shape, " ndim=", matrix.ndim)
print("3D tensor: shape=", tensor_3d.shape, " ndim=", tensor_3d.ndim)
print("4D tensor: shape=", batch_images.shape, " ndim=", batch_images.ndim)
Sortie :
标量: shape= () ndim= 0 向量: shape= (8,) ndim= 1 矩阵: shape= (2, 3) ndim= 2 3D 张量: shape= (2, 2, 3) ndim= 3 4D 张量: shape= (3, 2, 2, 1) ndim= 4
Le schéma de l'attribut shape
| Attribut | Signification | Scalaire | Vecteur (8 éléments) | Matrice (2×3) | 3D(2×2×3) |
|---|---|---|---|---|---|
.shape | Taille de chaque dimension | () | (8,) | (2, 3) | (2, 2, 3) |
.ndim | Nombre de dimensions = len(shape) | 0 | 1 | 2 | 3 |
.size | Nombre total d'éléments | 1 | 8 | 6 | 12 |
Lors du débogage de code d'apprentissage profond, si vous voyez une erreur d'incompatibilité de shape, la première étape consiste à afficher la shape pour vérifier les dimensions des données.
Comprendre la shape est la première compétence pour apprendre NumPy et tous les frameworks d'apprentissage profond.
Visualisation 3D des tenseurs
Ci-dessous, le tenseur 3×3×3 est représenté par 27 points dans l'espace : les trois axes de coordonnées correspondent à « ligne, colonne, canal », et l'intensité de couleur de chaque point représente la valeur à cette position. Faites glisser la souris pour faire pivoter la vue.
Attention : en gardant la couche « canal » fixe, vous verrez un plan 3×3 — c'est exactement un tenseur du second ordre (une matrice). C'est aussi pourquoi nous disons qu'« une matrice est un cas particulier d'un tenseur ».
Scénarios d'application en IA
Classification d'images : des tenseurs 3D aux tenseurs 4D
Dans la tâche de classification ImageNet, les images d'entrée sont uniformément redimensionnées à 224×224 pixels. Une image en couleur a une shape(224, 224, 3)Le tenseur 3D.
Pendant l'entraînement réel, le GPU traite un batch à la fois (par exemple, 32 images), et les données deviennent un tenseur 4D.(32, 224, 224, 3)。
Notez que différents frameworks ont des conventions différentes de position des canaux : TensorFlow/Keras utilisent(N, H, W, C)(Canaux en dernier), PyTorch utilise(N, C, H, W)(Le passage est tout à l'avant).
Lorsque vous voyez l'erreur « shape mismatch: (32, 224, 224, 3) vs (32, 3, 224, 224) », elle est causée par des positions de canaux incohérentes—utilisez.permute()ou.transpose()Il suffit de l'ajuster.
Traitement du langage naturel : matrices d'embedding
La taille du vocabulaire du modèle BERT est de 30522, et la dimension cachée est de 768. La forme de sa matrice d'embedding de mots est(30522, 768)—Chaque ligne est un vecteur de dimension 768 pour un mot.
Il en va de même pour la série GPT : le vocabulaire de GPT-2 est de 50,257, et la dimension d'embedding varie de 768 (petit modèle) à 1600 (grand modèle).
Lorsque vous saisissez un texte, le modèle consulte d'abord la table pour convertir chaque ID de mot en vecteur d'embedding correspondant ; c'est la « recherche dans la table pour extraire des lignes » — une opération d'indexation matricielle.
Couches entièrement connectées : la position centrale de la multiplication matricielle
Un réseau classique de reconnaissance de chiffres manuscrits MNIST : entrée de 784 dimensions (28×28 pixels aplatis), première couche cachée de 256 dimensions.
La forme de la matrice de poids W₁ est(256, 784)Chaque calcul de propagation avant.h = W₁ @ x, c'est-à-dire une matrice 256×784 multipliée par un vecteur de dimension 784.
La propagation avant de tout le réseau de neurones est essentiellement une alternance de couches de multiplication matricielle et de fonctions d'activation.
Données vidéo : tenseurs 5D
Une vidéo peut être comprise comme une séquence de plusieurs images. Un clip vidéo couleur de 16 images en 224×224 a pour forme(16, 224, 224, 3)。
Après ajout de la dimension de lot, il devient un tenseur 5D.(8, 16, 224, 224, 3)——C'est l'entrée standard pour les modèles de classification vidéo (tels que 3D-ResNet).
Autres extensions