【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クラスと自作のクラスの違いについてみていきました。
自作のクラスを作成することで、より複雑なネットワークを構築できることが分かりました。