【PyTorch】nn.Moduleとモデルの構築と使い方について



1. nn.Moduleとは
nn.Module
は、PyTorchにおけるニューラルネットワークモジュールの基底クラスです。レイヤー(層)やモデル全体を定義する際に使用され、パラメータの管理やモデルのシリアライズなど、多くの機能を提供します。
2. 基本的な使い方



2.1. クラスの定義と継承
まず、nn.Module
を継承したクラスを定義します。
nn.Moduleを継承すると、コンストラクタ__init__メソッド内でレイヤーなどの構成要素を定義できるようになります。次に、具体的にどのようにレイヤーを定義するかを見ていきます。
2.2. レイヤーの定義
モデル内の各レイヤーは、__init__
メソッドの中で定義します。ここでは、入力層、ReLU活性化関数、中間層を順に作成しています。例えば、以下のコードでは、784次元の入力を受け取り、128次元に圧縮する線形層(全結合層)と、128次元の出力をさらに10次元に変換するもう一つの線形層を定義しています。
2.3. フォワードメソッドの定義
forwardメソッドでは、データがモデルを通過する際の処理を定義します。具体的には、入力データを順に各レイヤーに渡していき、その結果を返します。以下のコードでは、layer1で次元を縮小し、ReLUで非線形性を導入し、最終的にlayer2で10次元に変換する処理を定義しています。
2.4. モデルのインスタンス化と使用
モデルを定義したら、次にモデルのインスタンスを作成してデータを流すことができます。以下のコードでは、MyModel
をインスタンス化し、ランダムなデータを入力して出力を確認しています。


3. nn.Moduleの重要なメソッドと属性
3.1. parameters()
モデルのすべての学習可能なパラメータを取得します。オプティマイザにパラメータを渡す際に使用します。
上記のコードでは、確率的勾配降下法(SGD)を使用して、学習率0.01でパラメータを最適化しています。
3.2. modules()
モデル内のすべてのサブモジュールをイテレートします。
3.3. train()とeval()
モデルを訓練モードまたは評価モードに設定します。
3.4. state_dict()
モデルの現在の状態(パラメータ)を辞書として保存・読み込みします。
4. ポイントとまとめ
- 初期化の注意:
super().__init__()
は必ず呼び出してください。これにより、親クラスnn.Module
の初期化処理が行われます。 - デバイスの指定:モデルとデータを同じデバイス(CPUやGPU)に配置する必要があります。
- カスタムレイヤーの作成:
nn.Module
を継承して独自のレイヤーを作成できます。