PyTorchのtorch.nnモジュールは、ニューラルネットワークモデルを構築するための中心的なモジュールであり、高水準なAPIを提供して、レイヤーの定義、パラメータ管理、損失関数、モデルの構造化を効率よく行うことができます。
以下では、torch.nnモジュールの主要な構成要素について詳しく解説します。
1. torch.nn.Module:全てのモデルの基底クラス
torch.nn.Module:全てのモデルの基底クラスPyTorchでニューラルネットワークを構築する際、すべてのモデルはnn.Moduleを継承して定義します。
特徴
-
__init__でレイヤーやパラメータを定義。 -
forwardメソッドで順伝播処理を定義。 -
model.parameters()で訓練可能なすべてのパラメータにアクセス可能。
2. レイヤー(モジュール)クラス
torch.nnは多くのレイヤー定義クラスを提供しています。代表的なものは以下の通りです:
| クラス名 | 説明 |
|---|---|
nn.Linear |
全結合(線形)レイヤー |
nn.Conv2d |
畳み込みレイヤー(2次元画像用) |
nn.ReLU |
活性化関数 ReLU |
nn.Sigmoid |
活性化関数 Sigmoid |
nn.BatchNorm2d |
バッチ正規化(2次元) |
nn.Dropout |
ドロップアウト正則化 |
nn.LSTM, nn.GRU |
RNN系モデルの構成要素 |
これらのモジュールはクラス内で定義し、forward関数で実行します。
3. 損失関数(Loss Functions)
torch.nnモジュールには多くの損失関数が用意されています。
| クラス名 | 用途 |
|---|---|
nn.MSELoss |
回帰タスク(平均二乗誤差) |
nn.CrossEntropyLoss |
多クラス分類(Softmaxを含む) |
nn.BCELoss |
2クラス分類(二値交差エントロピー) |
nn.NLLLoss |
負の対数尤度損失(LogSoftmaxと併用) |
例:
4. モデルの階層化と再利用
torch.nn.Moduleを継承したクラスをネストすることで、複雑なモデルを簡潔に再利用可能なパーツで構築できます。
5. Sequentialによる簡易モデル構築
Sequentialによる簡易モデル構築nn.Sequentialは、複数のレイヤーを順に積み重ねたシンプルなネットワーク構造を定義するのに便利です。
ただし、複雑な制御フローが必要な場合はnn.Moduleクラスを継承して定義する必要があります。
6. パラメータの取得・登録
モデルの学習対象であるパラメータは、model.parameters()やmodel.named_parameters()で取得できます。また、バッファ(例:バッチ正規化の統計量)はregister_buffer()を使って登録できます。
まとめ
torch.nnモジュールは、PyTorchのモデル構築における中心的な役割を担っています。以下の点を押さえることが重要です:
-
モデルはすべて
nn.Moduleを継承して定義。 -
多くのレイヤー・損失関数が標準で提供されており、迅速な開発が可能。
-
階層化や再利用性を意識した構造が組める。
-
Sequentialを使えば簡易なモデル定義が可能。
このモジュールを理解することは、PyTorchを用いた効率的で柔軟なニューラルネットワークの構築の第一歩となります。
生成日:2025/05/22