Interfejsy API Swift for TensorFlow używają typu Tensor
jako podstawowego sposobu wykonywania przyspieszonych obliczeń. Tensor
reprezentuje wielowymiarową tablicę wartości, a operacje na Tensor
są automatycznie wysyłane do dostępnych akceleratorów przy użyciu jednego z dwóch backendów.
Tensor
jest ogólny jeśli chodzi o typ wartości, które zawiera. Typ tych wartości musi być zgodny z TensorFlowScalar
, przy czym typowymi typami są Float
, Int32
i Bool
. Na przykład, aby zainicjować dwa elementy Tensor
zawierające Float
z pewnymi z góry określonymi wartościami, możesz wykonać następujące czynności:
let tensor1 = Tensor<Float>([0.0, 1.0, 2.0])
let tensor2 = Tensor<Float>([1.5, 2.5, 3.5])
Jeśli pominąłeś parametr typu <Float>
, Swift wywnioskowałby typ Tensor<Double>
. Double
jest domyślnym typem literałów zmiennoprzecinkowych w języku Swift. Wartości Float
są zwykle bardziej powszechne w obliczeniach uczenia maszynowego, więc użyjemy ich tutaj.
Wiele popularnych operatorów pracuje na Tensor
. Na przykład, aby dodać dwa z nich i uzyskać wynik, możesz wykonać następujące czynności:
let tensor3 = tensor1 + tensor2
Pełna lista operacji jakie możesz wykonać na Tensor
dostępna jest w dokumentacji API .
_Raw
operacje
Operacje Tensor
są wspierane przez dwa różne sposoby pracy z akceleratorami, ale mają ujednolicony interfejs wysokiego poziomu. Pod maską zdefiniowano operacje _Raw
, które wysyłają do wersji _RawXLA
lub _RawTFEager
, w zależności od backendu używanego dla danego Tensor
. Te powiązania _Raw
z TensorFlow lub X10 są generowane automatycznie.
Zwykle nie trzeba bezpośrednio wchodzić w interakcję z operacjami _Raw
. Na ich podstawie zbudowano interfejsy Idiomatic Swift i w ten sposób zazwyczaj wykonuje się obliczenia Tensor
.
Jednak nie wszystkie podstawowe operacje TensorFlow mają pasujące interfejsy Swift, więc czasami może być konieczne uzyskanie dostępu do operatorów _Raw
w kodzie. Jeśli zajdzie taka potrzeba, dostępny jest interaktywny samouczek pokazujący, jak to działa.