如何从 Pytorch 中定义为 class 对象的神经网络层获取权重?
How to get weights from layer of neural network that is defined as a class object in Pytorch?
我正在现有的代码框架之上开发一些东西,但我在从定义为 class 的神经网络中提取权重时遇到了一些问题。下面的代码
import numpy as np
import torch
import torch.nn as nn
class Solver:
class Head(nn.Module):
def __init__(self, base):
super().__init__()
self.base = base
self.last_layer = nn.Linear(100, 10)
def forward(self, x):
x = self.base(x)
x = self.last_layer(x)
return x
def __init__(self, bases, HeadClass=None):
self.base = bases
if HeadClass:
self.head = self.Head(self.base)
else:
self.head = self.Head(self.base)
print('Head Class:',self.head)
class Full_Solver:
class Base(nn.Module):
def __init__(self):
super().__init__()
self.linear_1 = nn.Linear(1, 100)
self.linear_2 = nn.Linear(100, 100)
self.linear_3 = nn.Linear(100, 100)
def forward(self, x):
x = self.linear_1(x)
x = torch.tanh(x)
x = self.linear_2(x)
x = torch.tanh(x)
x = self.linear_3(x)
x = torch.tanh(x)
return x
def __init__(self, BaseClass=Base()):
self.base = BaseClass
print('Base model:',self.base)
print('Base model type:',type(self.base))
solver_1 = Solver(self.base)
print('Full model:',solver_1)
print('Full model type:',type(solver_1))
xx = Full_Solver()
在Full_Solver
class中,我定义了一个基础神经网络,它将根据Solver
class中的某些条件添加一个Head(我有为了简洁起见,省略了所有条件)。当我执行 print('Full model:',solver_1)
时,我得到的输出是 Full model: <__main__.Solver object at 0x7f83a82e9cd0>
。 如何从此 class 对象中提取输出权重?(假设我只想从中提取随机分配的权重)
在这种情况下,它将是 print('Full model:',solver_1.head.last_layer.weight)
我正在现有的代码框架之上开发一些东西,但我在从定义为 class 的神经网络中提取权重时遇到了一些问题。下面的代码
import numpy as np
import torch
import torch.nn as nn
class Solver:
class Head(nn.Module):
def __init__(self, base):
super().__init__()
self.base = base
self.last_layer = nn.Linear(100, 10)
def forward(self, x):
x = self.base(x)
x = self.last_layer(x)
return x
def __init__(self, bases, HeadClass=None):
self.base = bases
if HeadClass:
self.head = self.Head(self.base)
else:
self.head = self.Head(self.base)
print('Head Class:',self.head)
class Full_Solver:
class Base(nn.Module):
def __init__(self):
super().__init__()
self.linear_1 = nn.Linear(1, 100)
self.linear_2 = nn.Linear(100, 100)
self.linear_3 = nn.Linear(100, 100)
def forward(self, x):
x = self.linear_1(x)
x = torch.tanh(x)
x = self.linear_2(x)
x = torch.tanh(x)
x = self.linear_3(x)
x = torch.tanh(x)
return x
def __init__(self, BaseClass=Base()):
self.base = BaseClass
print('Base model:',self.base)
print('Base model type:',type(self.base))
solver_1 = Solver(self.base)
print('Full model:',solver_1)
print('Full model type:',type(solver_1))
xx = Full_Solver()
在Full_Solver
class中,我定义了一个基础神经网络,它将根据Solver
class中的某些条件添加一个Head(我有为了简洁起见,省略了所有条件)。当我执行 print('Full model:',solver_1)
时,我得到的输出是 Full model: <__main__.Solver object at 0x7f83a82e9cd0>
。 如何从此 class 对象中提取输出权重?(假设我只想从中提取随机分配的权重)
在这种情况下,它将是 print('Full model:',solver_1.head.last_layer.weight)