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のそれ見たく色々書いてあって良くなってる!

www.tensorflow.org