named_parameters
不会将所有的参数全部列出来,名字就是成员的名字。也就是说通过 named_parameters
能够获取到所有的参数。因为一般来说,类中的成员是私有的,所以通过这种方式能够获取到所有的参数,进而在 optimizer 进行特殊的设置。看例子:
from torch.nn import Module
from torch.nn import Linear, LSTM
class Custom(Module):
def __init__(self):
super().__init__()
self._liner = Linear(in_features=2, out_features=1)
class MyModel(Module):
def __init__(self):
super().__init__()
self._custom = Custom()
self._liner = Linear(in_features=3, out_features=2)
if __name__ == '__main__':
model = MyModel()
for name, param in model.named_parameters():
print(f"name: {name}, param: {param}")
输出结果:
name: _custom._liner.weight, param: Parameter containing:
tensor([[ 0.1491, -0.1399]], requires_grad=True)
name: _custom._liner.bias, param: Parameter containing:
tensor([0.1610], requires_grad=True)
name: _liner.weight, param: Parameter containing:
tensor([[ 0.4107, 0.3264, -0.3523],
[-0.1159, 0.1754, -0.0553]], requires_grad=True)
name: _liner.bias, param: Parameter containing:
tensor([ 0.0489, -0.0194], requires_grad=True)
_custom._liner.weight
这个名字就是成员变量的名字的拼接。
网友评论