Hello Computer Vision

파이썬 getattr 알아보기 본문

딥러닝/파이썬

파이썬 getattr 알아보기

지웅쓰 2023. 5. 5. 23:22

다른 사람들의 코드들을 살펴보던 중 getattr을 발견했다. 예전부터 몇번 본 거 같은데 코드짜는데 있어 알고 있으면 나쁠 거는 없다고 생각해서 기록해두려고 한다.

 

우선 파이썬 내장된 함수이며 따로 import 해서 불러올 필요가 없다. 다른 분들의 설명을 잘 이해를 못했었는데 예시를 통해서 보면 더 쉬울 거 같다.

import torch.nn as nn
import torch

class MyModule(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(MyModule, self).__init__()
        self.fc = nn.Linear(input_dim, hidden_dim)
        self.bn = nn.BatchNorm1d(hidden_dim)
        self.output_layer = nn.Linear(hidden_dim, output_dim)

model = MyModule(input_dim=100, hidden_dim=64, output_dim=10)
fc_layer = getattr(model, "fc")
bn_layer = getattr(model, 'bn')
print(fc_layer)
print(bn_layer)
print(fc_layer(torch.rand(100)).shape)
Linear(in_features=100, out_features=64, bias=True)
BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.Size([64])

torch를 이용해 class를 생성하고 그 안에 layer들을 설정하고 그 layer들은 fc, bn으로 설정하였다. 그리고 model이라는 객체를 설정하였다. 

그리고 이제 getattr을 이용하여 model객체를 불러오고, 그 안에 fc, bn을 찾는다면 새로운 변수를 layer로 설정할 수 있는 것이다. 위의 코드를 본다면 쉽게 알 수 있고 layer에 대한 input값을 준다면 output값도 올바르게 나온 것을 확인할 수 있다.