カテゴリー
機械学習 プログラミング

【速習】Pytorch入門②:MLP回帰を実装してPyTorchの基礎を学ぶ

PyTorchで多層パーセプトロン(Multilayer perceptron:MLP)回帰を実装するとともに、主要なPyTorchパッケージを確認したいと思います。

前回はPyTorchのベースとなるtorchの扱い方をおさらいできました。

今回は、PyTorchで多層パーセプトロン(Multilayer perceptron:MLP)回帰を実装するとともに、主要なPyTorchパッケージを確認したいと思います。

全体の流れ

モデル実装の全体的な流れは下のようになります。()内はその際に使用するPyTorchパッケージです。

  • 入力データセットの作成、反復処理(Dataset, Dataloader)
  • ニューラルネットワークの定義(nn.Module)
  • 損失の計算、勾配をネットワークのパラメーターに伝播(nn.Module)
  • ネットワークの重みを更新(Optimaizer)

主要なPyTorchパッケージ

PyTorchに関わらず、多くのディープラーニングフレームワークでは実装を簡易化するために様々なパッケージを提供しています。PyTorchでは主に以下のものがあります。

torch.tensor多次元配列。PyTorchで使うデータ構造。
torch.autograd順伝播・逆伝播を実装する。逆伝播(backward())などでのTensorに対する自動微分操作をサポートする。
torch.utils.data入力するデータとそのラベルをセットにしてまとめる「Dataset」やDatasetからミニバッチでデータを取り出しモデルへ渡す「Dataloader」などのユーティリティを含む。
torch.nn.Moduleニューラルネットワークの構築に用いる。モデルの保存や読み込み、GPUへの移動など、パラメーターのカプセル化を担う。
torch.optimSDGやAdamなどのパラメータ最適化アルゴリズムを使えるようにする。
主要なPyTorchパッケージ

モデルの実装

データセットの作成

今回は、練習用データとして sin(5x) に乱数を加えたものをnumpyで用意します。from_numpy()でtorch.tensorに変換します。

モデルの定義

pytorchでは、nn.Moduleクラスを継承した「pythonのclass」としてモデルを定義します。

class MLP(nn.Module): 定義するMLPというclassは、親クラスnn.Moduleを継承
def init(): 引数を受け取ってインスタンス化する
super(MLP, self).init(): super関数で親クラスを継承する
def forward(self, x): インスタンス化した後、その関数が呼び出されたときに動作する。forward関数を定義するとbackward 関数(勾配計算)も自動的に定義される

.parameters()でnetworkの構造やパラメータを取得できます。

損失の計算・逆伝播・重みの更新

個々の動作を理解するために、xからデータを1つ取り出してニューラルネットワークに入力し、誤差の計算や重みの更新によるパラメータの変化をみてみます。

学習ループを回してみる

上記の流れをバッチごとに行い、ニューラルネットワークを学習させます。
Datasetはデータとそれに対応するラベルを1組返し、DataLoaderはデータをバッチサイズにまとめて返すクラスです。

計算グラフの可視化

今回作成した3層のMLPの構造はtorchvizというpythonのパッケージを使うことで可視化できます。parameters()だけでは物足りない時にどうぞ。

以上、MLP回帰の実装を通して、PyTorchとその主要なPyTorchパッケージを確認しました。

作成者: echomis

化学メーカーに勤務する薬学院卒研究員。興味のある科学技術(化学、生物、機械学習)についての勉強メモや役立つ情報などをブログにしていこうと思います。

アーカイブを表示

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です