4ChainerのMNISTのコードをPyTorch+Igniteで書き直してみたPythonChainerPyTorchIgniteTL;DRChainerのMNISTのコードをPyTorchに書き直して見た感想は、ほとんど違いがなかったです。違いがあった部分は、Chainerで言うUpdaterより上位層、PyTorchで言うIgnite層でした。実はchainer-pytorch-migrationを使うと、Chainerで使っていたExtentionsをIgniteでも使えたりして、かなりChainerライクにPyTorch+Igniteを使うことができます。今までChainerを使っていた方も自然とPyTorch+Igniteに慣れることができるのではと思います。PFNによるChainerの開発停止とPyTorch採用ここ[1]に記載されているように、PFNはChainerの開発を終了し、PyTorchに移行することが発表されました。:西川徹、プリファードネットワークス、以下、PFN)は、研究開発の基盤技術である深層学習フレームワークを、自社開発のChainerTMから、PyTorchに順次移行します。同時に、PyTorchを開発する米FacebookおよびPyTorchの開発者コミュニティと連携し、PyTorchの開発に参加します。Chainerは、本日公開されたメジャーバージョンアップとなる最新版v7をもってメンテナンスフェーズに移行します。Chainerユーザー向けには、PyTorchへの移行を支援するドキュメントおよびライブラリを提供します。今すぐにChainerを使えなくなるわけではないですが、Chainerユーザは徐々に他のフレームワークに移行せざるを得ない状況になっています。[3]を提供しています。上記、ドキュメントを見ると、ChainerとPyTorch+Igniteの対応関係は以下のようです。[2]上記からわかることは、ChainerのOptimizerまでの役割は、PyTorchが対応しているChainerのUpdater・Trainerの役割は、Igniteが対応しているなので、学習ステップを自分で書く場合はPyTorchのみで書けるが、ChainerのTrainerのように学習ステップもフレームワークで対応してもらいたい場合はPyTorch+Igniteを使う必要があることがわかります。ChainerからPyTorch+Igniteへ移行してみた移行対象となるコード下記リンク先にChainerのTrainerを使って、MNISTの訓練・推論を行うNotebookがあります。Trainerを使ってみよう今回は上記コードをPyTorch+Igniteを使って書き直してみたいと思います。train=False)違いここはサンプルデータセットの読み込み部分なのでそれなりに違いがある部分だと思いますが、実用途では違いがあってもあまり関係がない部分です。shuffle=False)違い(ほとんど同じですね)引数がちょっと違うくらいですかね。MLP()違い(ほとんど同じですね)PyTorchの場合は、Linearのin_featuresをNoneとして省略することができないようです。dim=1)を明示的に計算している。start_dim=1)として1次元にしている。lr=lr)違い(ほとんど同じですね)引数がちょっと違うくらいですかね。device=device)違い(ほとんど同じですね)引数がちょっと違うくらいですかね。model})違いためしに、Igniteで以下をしてみたのですが、Chainerと書き方はだいぶ異なります。実装さえすれば今までできたことができないということはなさそうです。max_epochs=max_epochs)違い(ほとんど同じですね)引数がちょっと違うくらいですかね。移行後のコード実際に移行してColaboratoryで動くNotebookは以下にあります。上記で説明したコードだけでなく、以下も含まれているのでよろしければお手元で実行してみてください。Chainerのextensionsが恋しい方はchainer-pytorch-migrationを使ってみてください。upLoginユーザーは見つかりませんでした。