化学系の研究者が機械学習の開発を始めるとき、PyTorchとTensorFlowのどちらのライブラリを選べばよいか迷う方は多いのではないでしょうか。
私自身、PyTorchとTensorFlowの両方を使って開発した経験があります。結論から言うと、これから始める方にはPyTorchがおすすめです。この記事では、以下の3つの観点から分かりやすく説明します。
1. 現在主流なのはどちらか
2. OSへのネイティブ対応
3. 実装のしやすさ
1. 現在主流なのはどちらか
まず気になるのは、現在どちらのライブラリが主流なのかという点です。
GoogleトレンドでPyTorchとTensorFlowの検索数を比較すると、近年はPyTorchの存在感が大きくなっていることが分かります。AI開発用ライブラリとしては、TensorFlowが先行して普及しました。TensorFlowは2015年にベータ版、2017年にバージョン1.0を公開しています。一方、PyTorchは2017年に公開された後発のライブラリです。
しかし、コードの書きやすさや扱いやすさの面でPyTorchが評価され、現在では研究開発の現場でも広く使われるようになっています。特に、これから機械学習を学ぶ初心者にとっては、PyTorchのほうが理解しやすい場面が多いです。
2. OSへのネイティブ対応
学校や会社で使っているパソコンのOSは、Windowsであることが多いと思います。機械学習では、計算を高速化するためにGPUを使うことが重要です。
PyTorchは、Windows環境でもネイティブにGPUをサポートしています。
一方で、TensorFlowはバージョン2.10を最後に、Windowsネイティブ環境でのGPUサポートを終了しています。
TensorFlowでWindows上のGPUを使いたい場合は、WSL(Windows Subsystem for Linux)を利用する方法があります。ただし、会社のパソコンではセキュリティの都合でWSLの利用が制限されていることも少なくありません。
そのため、Windows環境でスムーズに機械学習を始めたい方には、PyTorchのほうが導入しやすいと言えます。
3. 実装のしやすさ
実装のしやすさについては、TensorFlowのほうがシンプルに書ける場面があります。特に、TensorFlowのFunctional APIは構造が分かりやすく、少ないコード量でモデルを定義できます。
一方で、PyTorchはTensorFlowのFunctional APIと考え方が近く、記述量はやや多いものの、書き方そのものが極端に難しいわけではありません。むしろ、処理の流れが見えやすいため、学習用として理解しやすいというメリットがあります。
下記に、同等のプログラム例を示します。
PyTorchのコード
class MNISTFunctionalNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(28 * 28, 128)
self.fc2 = nn.Linear(128, 64)
self.fc3 = nn.Linear(64, 10)
def forward(self, x):
x = torch.flatten(x, start_dim=1) # [N,1,28,28] -> [N,784]
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x) # logits
return x
model = MNISTFunctionalNet().to(device)
TensorFlowのコード
inputs = tf.keras.Input(shape=(28, 28, 1))
x = layers.Flatten()(inputs) # [N, 28, 28, 1] -> [N, 784]
x = layers.Dense(128, activation='relu')(x)
x = layers.Dense(64, activation='relu')(x)
outputs = layers.Dense(10)(x) # logits
model = Model(inputs=inputs, outputs=outputs, name="MNISTFunctionalNet")
このように比較すると、TensorFlowのほうがコンパクトに見えます。ただし、これから機械学習の中身を理解しながら学びたい方にとっては、PyTorchの明示的な書き方のほうが学習しやすいと感じる場合も多いでしょう。
4. まとめ
これから機械学習の開発を始める化学系研究者には、PyTorchをおすすめします。
その理由は、以下の2点が大きいからです。
・今後も利用者が多いと考えられること
・Windows環境でGPUを使いやすいこと
TensorFlowにも優れた点はありますが、初心者が学習を始めやすく、かつWindows環境でも扱いやすいという意味で、現時点ではPyTorchのほうが選びやすいライブラリです。
これから新しく機械学習を始める方は、まずPyTorchから学んでみるとよいでしょう。すでにTensorFlowを使っている方も、今後の開発環境や学習のしやすさを考えると、PyTorchへの移行を検討する価値は十分にあります。