torch.nnモジュールの理解

PyTorchのtorch.nnモジュールは、ニューラルネットワークモデルを構築するための中心的なモジュールであり、高水準なAPIを提供して、レイヤーの定義、パラメータ管理、損失関数、モデルの構造化を効率よく行うことができます。

以下では、torch.nnモジュールの主要な構成要素について詳しく解説します。


1. torch.nn.Module:全てのモデルの基底クラス

PyTorchでニューラルネットワークを構築する際、すべてのモデルはnn.Moduleを継承して定義します。

python
import torch.nn as nn class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.linear = nn.Linear(10, 5) def forward(self, x): return self.linear(x)

特徴

  • __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と併用)

例:

python
loss_fn = nn.CrossEntropyLoss() loss = loss_fn(output, target)

4. モデルの階層化と再利用

torch.nn.Moduleを継承したクラスをネストすることで、複雑なモデルを簡潔に再利用可能なパーツで構築できます。

python
class SubBlock(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(20, 10) def forward(self, x): return torch.relu(self.fc(x)) class ComplexModel(nn.Module): def __init__(self): super().__init__() self.block1 = SubBlock() self.block2 = SubBlock() def forward(self, x): x = self.block1(x) x = self.block2(x) return x

5. Sequentialによる簡易モデル構築

nn.Sequentialは、複数のレイヤーを順に積み重ねたシンプルなネットワーク構造を定義するのに便利です。

python
model = nn.Sequential( nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 5) )

ただし、複雑な制御フローが必要な場合はnn.Moduleクラスを継承して定義する必要があります。


6. パラメータの取得・登録

モデルの学習対象であるパラメータは、model.parameters()model.named_parameters()で取得できます。また、バッファ(例:バッチ正規化の統計量)はregister_buffer()を使って登録できます。


まとめ

torch.nnモジュールは、PyTorchのモデル構築における中心的な役割を担っています。以下の点を押さえることが重要です:

  • モデルはすべてnn.Moduleを継承して定義。

  • 多くのレイヤー・損失関数が標準で提供されており、迅速な開発が可能。

  • 階層化や再利用性を意識した構造が組める。

  • Sequentialを使えば簡易なモデル定義が可能。

このモジュールを理解することは、PyTorchを用いた効率的で柔軟なニューラルネットワークの構築の第一歩となります。

生成日:2025/05/22