AI
2024/05/28
古川 直輝

【Pytorch】Sequentialクラスと自作クラスの違い

『PyTorch』とは、Facebookが開発を主導したPython向けの機械学習ライブラリです。今回はPytorchのSequentialと自作のクラスの違いについてみていきたいと思います。

はじめに

『PyTorch』とは、Facebookが開発を主導したPython向けの機械学習ライブラリです。


今回はPytorchのSequentialと自作のクラスの違いについてみていきたいと思います。

Sequentialクラスとは

Sequentialクラスを使うことで、レイヤー(層)やその他のモジュールを順番に積み重ねることができ、一連の操作を直線的に実行するモデルを構築することができます。

自作のクラスを作る理由

Sequentialクラスはデータに応じてネットワークを変更するなどの複雑なネットワークを定義することはできません。そのような場合に自作のクラスを作成します。

Sequentialクラス

以下はSequentialクラスの記述方法です。


【In】



nn.Sequential{
nn.Linear(1000,100),
nn.ReLU(),
nn.Linear(100,10)
}


【Out】


Sequential(


     (0): Linear(in_features = 1000, out_features = 100, bias = True)


      (1): ReLU()


      (2): Linear(in_features = 100, out_features = 10, bias = True)


)


 


ReLUは近年多く利用されている活性化関数です。

自作のクラス

以下は自作クラスの記述方法です。


【In】



class Net(nn.Module):

def __init__(self):
super(Net,self).__init__()
self.linear1 = nn.Linear(1000,100)
self.lienar2 = nn.Linear(100,10)

def forward(self,x):
x = F.relu(self,x):
x = self.linear2(x)
return x

net = Net()
print(net)


Net(


     (linear1): Linear(in_features = 1000, out_features = 10, bias = True)


      (linear2): Linear(in_features = 100, out_features = 10, bias = True)


 


自作クラスを作成する際には、nn.Moduleからクラスを継承し、__init__で初期化します。


順伝播の計算はforwardに記述します。そうすることで自動微分まで可能になります。

まとめ

今回はPytorchのSequentialクラスと自作のクラスの違いについてみていきました。


自作のクラスを作成することで、より複雑なネットワークを構築できることが分かりました。

New call-to-action