S4TFの基本のき
この前の続き。あとあと更新する予定
Tensorの宣言
PyTorch と S4TFのTensorの宣言を比較しながら見ていきます。
- PyTorch
import torch a = torch.tensor([1, 2, 3, 4, 5]) np_a = a.numpy() # NumPy配列にする。
- Swift for TensorFlow
import TensorFlow import Python // PythonObjectを使う際は PythonLibrary.useVersion(3, 6) // これが必須みたい var a: Tensor<Float> = Tensor<Float>([1, 2, 3, 4, 5]) // var a = Tensor<Float>([1, 2, 3, 4, 5]) // こっちでもOK var np_a: PythonObject = a.makeNumpyArray() // NumPy配列にする。
Swiftは静的型付け言語なので型宣言をします。なお、var
で宣言した場合、変数、 let
は定数です。
Tensorを宣言する際、Tensor<Float>
以外にも Tensor<Double>
や Tensor<Int32>
等が可能。
自動微分
Swift for TensorFlowで自動微分を行うには以下のような手段がある。
@differentiable(wrt: x) func f(x: Float) -> Float { return x * x } let df = gradient(of: f) print(f(x: 5.0)) // 25.0 print("関数f を微分した結果: \(df(5.0))") // 10.0
さっき見たらなんか、TensorFlowの公式ページかっこよくなって、TF 2.0のチュートリアルもPyTorchのそれ見たく色々書いてあって良くなってる!