Présentation du tenseur

Les API Swift pour TensorFlow utilisent le type Tensor comme principal moyen d'effectuer des calculs accélérés. Un Tensor représente un tableau multidimensionnel de valeurs, et les opérations sur les Tensor sont automatiquement distribuées aux accélérateurs disponibles à l'aide de l'un des deux backends.

Un Tensor est générique quant au type des valeurs qu'il contient. Le type de ces valeurs doit être conforme à TensorFlowScalar , les types courants étant Float , Int32 et Bool . Par exemple, pour initialiser deux Tensor contenant Float avec des valeurs prédéterminées, vous pouvez procéder comme suit :

let tensor1 = Tensor<Float>([0.0, 1.0, 2.0])
let tensor2 = Tensor<Float>([1.5, 2.5, 3.5])

Si vous aviez omis le paramètre de type <Float> , Swift en déduirait un type de Tensor<Double> . Double est le type par défaut pour les littéraux à virgule flottante dans Swift. Les valeurs Float ont tendance à être plus courantes dans les calculs d'apprentissage automatique, nous les utilisons donc ici.

De nombreux opérateurs courants fonctionnent sur Tensor s. Par exemple, pour en ajouter deux et obtenir le résultat, vous pouvez procéder comme suit :

let tensor3 = tensor1 + tensor2

La liste complète des opérations que vous pouvez effectuer sur un Tensor est disponible dans la documentation de l'API .

_Opérations _Raw

Les opérations Tensor s'appuient sur deux moyens différents de travailler avec des accélérateurs, mais elles disposent d'une interface de haut niveau unifiée. Sous le capot, les opérations _Raw sont définies et sont distribuées vers les versions _RawXLA ou _RawTFEager , en fonction du backend utilisé pour les Tensor en question. Ces liaisons _Raw vers TensorFlow ou X10 sont automatiquement générées.

Normalement, vous n’auriez pas besoin d’interagir directement avec les opérations _Raw . Des interfaces Idiomatic Swift ont été construites sur celles-ci, et c'est ainsi que vous effectuerez généralement les calculs Tensor .

Cependant, toutes les opérations TensorFlow sous-jacentes n'ont pas d'interfaces Swift correspondantes, vous devrez donc parfois accéder aux opérateurs _Raw dans votre code. Si vous en avez besoin, un didacticiel interactif est disponible pour montrer comment cela fonctionne.