Transcript for:
Introduction aux Tenseurs en Mathématiques

Dans cette vidéo, je vais vous présenter la notion de tenseur, mais je commence par un avertissement. Derrière ce mot de tenseur peut se cacher différentes notions. Vous avez les tenseurs mathématiques, qui sont des objets assez complexes. Vous avez des tenseurs de TensorFlow, qui sont des objets informatiques très puissants. Et nous, on va se contenter des tenseurs comme des tableaux de nombres, donc plutôt le point de vue de NumPy.

Alors en fait... Avec ce point de vue, vous connaissez déjà la notion de tenseur. Par exemple, un vecteur est un tenseur. Et on parle de un tenseur parce que c'est de dimension 1. C'est-à-dire que vous avez une seule dimension.

Par contre, une matrice ou un tableau à deux dimensions, on parlerait d'un deux-tenseur. Et puis, c'est cette notion qu'on veut généraliser. Si vous avez ici un tableau à trois dimensions, on parle de trois tenseurs.

Et puis il n'y a pas de limite à ce nombre de dimensions. Commençons avec l'exemple d'un vecteur et à l'aide de NumPy. Donc voici comment s'affiche un vecteur 5, 7, 8. Et alors pour les tenseurs, il y a un vocabulaire important, il ne faut pas confondre les différentes notions.

Donc on a la notion de dimension ou de rang, c'est le nombre d'indices qui servent à parcourir notre tenseur. Alors ici, pour un vecteur, il n'y a qu'un seul indice qui correspond au numéro de l'élément. Donc la dimension où le rang, c'est 1. Ça s'obtient avec nDim.

La taille, lui, c'est le nombre d'éléments dans chacune des dimensions. Alors ici, comme on n'a qu'une seule dimension, la taille, c'est juste 3. Et normalement, la taille, c'est un nUplay. Et donc ici, pour préciser qu'il pourrait y avoir d'autres valeurs, on met 3, d'accord ?

Ce n'est pas juste 3. Maintenant, le nombre d'éléments qui s'obtient par la commande size, c'est tout simplement le nombre d'éléments et ça correspond à la taille qu'il faudrait réserver en mémoire pour stocker notre tenseur. Et puis, si on veut accéder à un élément, c'est comme une liste, donc V crochet 0, premier élément, ici c'est 5. Second exemple avec cette fois-ci une matrice, donc un deux-tenseur. Pour un deux-tenseur, la dimension est donc 2, d'accord ?

Parce qu'il faut un indice i pour les lignes et un indice j pour les colonnes, donc bien deux indices. La taille, on a donc ici deux lignes et trois colonnes, donc la taille c'est le couple 2-3. Et donc on a deux lignes et trois colonnes, donc on a bien six éléments en tout, 2 x 3. Et puis on peut accéder à la première ligne et ici au premier élément en donnant deux indices. On passe à un exemple de trois tenseurs. Vous voyez que cet exemple de trois tenseurs est défini comme une liste de deux tenseurs.

Donc on a en fait une sorte de définition par récurrence. Alors bien évidemment un 3 tenseur est de dimension 3 parce qu'il faut 3 indices i, j et k pour accéder à un élément. La taille, donc shape avec numpy, est un triplet.

Et le nombre d'éléments est le produit des éléments de la taille. Donc 3 x 2 x 3 égale 18, il y a 18 éléments. Et donc c'est ce que je vous disais, pour accéder à un élément il faut donner 3 indices.

On manipule les tenseurs de n'importe quelle dimension comme on manipulerait les vecteurs ou les tableaux NumPy. Par exemple, ici j'ai un vecteur V et j'ajoute 3 à chacun des éléments de ce vecteur. Et donc j'obtiens un vecteur V' de même longueur que V. Ici, je prends une matrice A et j'élève chaque élément au carré.

Donc j'obtiens une nouvelle matrice A'. Et ici, je retire A. 1 à chacun de mes éléments de mon 3 tenseurs.

On peut faire des opérations plus sophistiquées. Donc j'ai mon vecteur V, mon vecteur V', je peux faire l'addition des vecteurs. Donc j'obtiens un vecteur V' de même taille qui est l'addition de mes V plus V'. Ce qui n'a rien à voir, la fonction somme, elle, va renvoyer la somme de tous les éléments ici de ma matrice A.

Et donc ça renvoie ici... un nombre réel, d'accord, et non pas un tenseur. Et aussi, je peux prendre ici la fonction, appliquer une fonction à chacun des éléments de mon tenseur. Ici, j'applique...

Je clique la fonction racine carré à mon tenseur et donc j'obtiens un tenseur de même taille que T et chaque élément de ce nouveau tenseur est la racine carré du tenseur original. Alors lorsqu'on a un tenseur, il est très fréquent de vouloir conserver tous les éléments de ce tenseur mais de vouloir changer la forme du tenseur. Une des opérations les plus fréquentes, c'est l'aplatissement du tenseur, c'est-à-dire on transforme un tenseur de n'importe quelle dimension en un vecteur. C'est la commande flatten qui permet de le faire. Vous voyez ici que tous nos éléments de nos trois tenseurs sont transformés en un vecteur, donc un tenseur.

Plus généralement, n'importe quelle transformation que vous pouvez imaginer est réalisable. Donc prenons toujours notre exemple de notre 3 tenseurs. Donc notre 3 tenseurs, il avait 18 éléments, il était de taille originale 3, 2, 3. Mais en fait, comme il a 18 éléments, on pourrait le transformer en un tenseur de taille 2, 9. C'est-à-dire une matrice avec 2 lignes et 9 colonnes.

D'accord ? Donc c'est ce qu'on fait ici avec la commande reshape. D'accord ?

Vous avez ici une matrice avec 2 lignes et 3 colonnes. Autre opération possible, 18 c'est aussi 2 x 3 x 3. Donc on peut aussi le transformer en ce tenseur-là de taille 2-3-3.