モデルの構造表示(print(model))

PyTorchにおける「モデルの構造表示(print(model))」は、ニューラルネットワークの内部構造を確認するための基本的かつ非常に有用な手段です。以下では、その目的、出力内容、活用方法について詳しく説明します。


1. 基本的な使い方

PyTorchで定義したモデル(nn.Moduleを継承したクラスのインスタンス)に対して、次のように記述することでモデルの構造を表示できます。

python
print(model)

これは、モデルの__str__()メソッドまたは__repr__()メソッドを呼び出して、その構造を人間に読みやすい形式で出力します。


2. 表示される情報の内容

print(model) の出力には以下の情報が含まれます:

  • 各レイヤの名前と型(例:Conv2d, Linear, ReLUなど)

  • 各レイヤの引数(入力チャンネル数、カーネルサイズ、出力ユニット数など)

  • 階層構造(Sequentialなどでネストされた場合)

  • 登録されたサブモジュールの順序

python
import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.features = nn.Sequential( nn.Conv2d(1, 32, kernel_size=3), nn.ReLU(), nn.MaxPool2d(2) ) self.classifier = nn.Sequential( nn.Linear(32 * 13 * 13, 128), nn.ReLU(), nn.Linear(128, 10) ) def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) x = self.classifier(x) return x model = SimpleCNN() print(model)

出力例

scss
SimpleCNN( (features): Sequential( (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1)) (1): ReLU() (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) (classifier): Sequential( (0): Linear(in_features=2704, out_features=128, bias=True) (1): ReLU() (2): Linear(in_features=128, out_features=10, bias=True) ) )

3. 活用のポイント

モデル構造の確認・理解

  • モデルを他人から引き継いだときや自分が設計したモデルの構成を見直したいときに役立ちます。

  • 入出力次元の整合性や順序のミスを早期に発見できます。

デバッグの初期ステップとして

  • 期待通りにレイヤーが積まれているか、必要な活性化関数が含まれているかを確認します。

  • ネスト構造(SequentialModuleListなど)の意図が正しく表現されているか確認できます。


4. 注意点

  • print(model) では**テンソルの形状(サイズ)**は表示されません。テンソルサイズも確認したい場合は、torchsummary.summary()torchinfo.summary()のような補助ツールを使うのが適しています。

  • モデルが複雑すぎる場合、出力が長くなって可読性が落ちるため、サブモジュールごとに個別に確認すると良いことがあります。


まとめ

print(model) はPyTorchにおいてモデルの構造や各層の接続状態を素早く把握する手段として非常に有効です。デバッグや構造確認の初手として習慣的に使うことで、モデル設計ミスの早期発見や、コードの可読性向上に貢献します。より詳細な情報が必要な場合は、torchinfo.summary()のような外部ツールと組み合わせて使用することを推奨します。

生成日:2025/05/22