2023.08.09 NNの重み行列確認(基本)【torch】
PyTorchで構成したネットワークが保持するレイヤーの重み行列を確認する方法を示す。
まず、雛形を示す。
code:python
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net1(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(2, 5)
print('# 全結合層')
model1 = Net1()
print('# レイヤの保持する重み行列はparameter()メソッドで取り出すことができる。')
print(model1.parameters())
parameters()メソッドで取り出されたオブジェクトはイタレブルなので、画面に表示するとこのようにオブジェクトの属性だけが出力される。
code:python
# 全結合レイヤ
# レイヤの保持する重み行列はparameter()メソッドで取り出すことができる。
<generator object Module.parameters at 0x7f2031d692a0>
そこで、レイヤーの重みパラメータを取り出すための方法を2通り示す。
1つ目は、rangeオブジェクトのように for 文で順に取り出す方法である。
code:python
for param in model1.parameters():
print(param)
結果は、次のようにレイヤごとに重み行列が取り出すことができる。
code:python
Parameter containing:
tensor([ 0.1466, -0.6364,
0.5645, 0.3709,
-0.4023, -0.1175,
0.1768, 0.5744,
-0.2903, 0.1639], requires_grad=True)
Parameter containing:
tensor(-0.5942, -0.0277, -0.2132, -0.4451, -0.1575, requires_grad=True)
2つ目は、リストオブジェクトにキャストする方法である。
code:python
params = list(model1.parameters())
print(params)
これで各レイヤの重み行列を要素に持つリストを得ることができる。
code:python
[Parameter containing:
tensor([-0.4910, 0.1943,
-0.1770, 0.1880,
0.6039, 0.3964,
0.4896, 0.6205,
0.3619, 0.0246], requires_grad=True), Parameter containing:
tensor(-0.5042, 0.0745, -0.3552, 0.5966, -0.5883, requires_grad=True)]
2023.08.09 NNの重み行列確認(順序について)【torch】につづく