파이토치에서 모델의 가중치 값을 얻는 방법
설명
다음과 같은 모델을 정의하자.
import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.linear = nn.Linear(3, 3, bias=True)
self.conv = nn.Conv2d(3, 5, 2)
f = Model()
그러면 .weight
와 .bias
메소드로 각 층의 가중치와 바이어스에 접근할 수 있다. 단 .weight
(.bias
)로 얻은 값은 텐서가 아니라 파라매터라는 객체이므로 가중치의 값을 가진 텐서를 얻고 싶다면 .weight.data
(.bias.data
)와 같이 사용하여야 한다.
>>> f.linear.weight
Parameter containing:
tensor([[ 0.1915, -0.4718, 0.3868],
[ 0.4980, 0.5133, 0.5112],
[-0.2138, -0.1519, -0.3647]], requires_grad=True)
>>> type(f.linear.weight)
<class 'torch.nn.parameter.Parameter'>
>>> f.linear.weight.data
tensor([[ 0.1915, -0.4718, 0.3868],
[ 0.4980, 0.5133, 0.5112],
[-0.2138, -0.1519, -0.3647]])
>>> type(f.linear.weight.data)
<class 'torch.Tensor'>
>>> f.conv.weight.data
tensor([[[[-0.2826, 0.0635],
[-0.2118, 0.1866]],
[[-0.1556, -0.1097],
[ 0.1832, -0.1229]],
[[ 0.2072, -0.0882],
[-0.1736, 0.2524]]],
[[[-0.2238, -0.2666],
[-0.1213, -0.1151]],
[[ 0.2196, 0.0461],
[ 0.0243, 0.1159]],
[[ 0.2369, -0.0391],
[ 0.0197, -0.2747]]],
.
.
.
(이하생략)