Pytorch ネットワークの重みに任意の値を持たせる方法

背景

Pytorchを用いてニューラルネットワークの順伝播の最終出力を確認したかった。

実際にニューラルネットワークを用いて予測を行う時に使う場面はないと思うが(重みの初期値はランダムに設定するはず)挙動の確認の際に役に立った。

コード

ポイントはnn,Linearが持つ重みパラメータ(とバイアスのパラメータ)をnn.Parameter(torch.tensor())で代入してあげること。単にtorch.tensor()で代入しようとするとエラー。

以下は入力層、中間層1層、出力層で構成されるニューラルネットワーク。

ここでは特徴量の次元数は3、中間層もユニット数は2による例



class FF_L1(nn.Module): # w_numは特徴量の次元数、c_numはクラス数、unit_numは中間層のユニット数 def __init__(self, w_num, c_num, unit_num): super(FF_L1, self).__init__() self.fc1 = nn.Linear(w_num, unit_num) self.fc2 = nn.Linear(unit_num, c_num) self.relu = nn.ReLU() def forward(self, x): x = torch.tensor(x).float() x = self.fc1(x) x = self.relu(x) x = self.fc2(x) return x # モデルパラメータを初期化 def parameter_init(self): self.fc1.weight = nn.Parameter(torch.tensor([[3,1,2],[-2,-3,-1]]).float()) nn.init.constant_(self.fc1.bias, 0) self.fc2.weight = nn.Parameter(torch.tensor([[2.0,3.0]]).float()) nn.init.constant_(self.fc2.bias, 0)

コメント

タイトルとURLをコピーしました