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.