logo

파이토치에서 모델의 가중치 값을 얻는 방법 📂머신러닝

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

설명

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

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