最近はPyTrochをよく使っています。10年くらい前はTensorflowばかり使っていたのに...
いま改めてTensorflowとPyTorchの違いについて考えてみました。
個人的に両者の最も大きな違いは、モデルに対するデータの渡し方と誤差逆伝播の書き方。
まずはデータの渡し方。
Tensorflowでは、特徴量データと教師データを明確に分けて、例えばX_trainとy_trainといった形でモデルに渡します。一方Pytorchは特徴量データと教師データをデータローダーにまとめて、データローダーをモデルに渡します。そしてバッチサイズはデータローダー内で定義します。Tensorflowではモデル内でバッチサイズを定義します。
誤差逆伝播ですが、Tensorflowでは誤差逆伝播については、ほぼ意識する必要はありませんでした。PyTorchではエポックを回す関数の中で、予測値の計算→誤差計算→勾配計算→パラメータ修正を明示的に描く必要があります。
このようにしてみると、PyTorchのほうが面倒そうですが、fastaiをつかうと、データローダの定義やモデル定義が本の数行で書けてしまうし、誤差逆伝播からパラメータ修正の部分も書く必要がなくなっています。
fastaiは簡単にPyTorchを使うことができてとても便利なのですが、深層学習が完全にブラックボックス化してしまって、自分が書いたコードのどこで何が行われているのかがさっぱりわからなくなります。特に機械学習を始めたばかりの方にとっては、自分の学習のためにはTensorflowなりPyTorchなりを一通り学んだうえで、fastaiを使うことをお勧めします。