파이토치에서 모델의 가중치 값을 얻는 방법

파이토치에서 모델의 가중치 값을 얻는 방법

How to Obtaion Weights of Model in PyTorch

설명

다음과 같은 모델을 정의하자.

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]]],
.
.
.
(이하생략)
댓글