개발자
안녕하세요 파이토치를 공부하고 있는 대학생입니다 파이토치 코드를 공부하다보면 m = nn.Linear(20, 30) input = torch.randn(128, 20) output = m(input) print(output.size()) torch.Size([128, 30]) 이런식으로 코드를 작성하는데, m은 Linear 클래스로 만든 인스턴스인데 아래에서 m(input)처럼 마치 함수처럼 사용하는 것이 궁금합니다.. 파이썬 callable과 관련이 있는 것 같은데 nn.Module 클래스르 상속 받아서 가능한 것인가요? 파이토치 문서를 봐도 이해가 되지 않아 질문드립니다
답변 1
안녕하세요! 단순히 공식 문서의 소스 코드만 봤을때는 Module 클래스를 상속 받아서 가능한것 같습니다. Module 클래스를 보시면 __call__ 이라는 내장 함수에 _call_impl라는 함수를 할당해주고 있어요. 파이썬에서 __call__은 클래스를 함수처럼 invoke 해주는 내장 함수입니다 :) - https://pytorch.org/docs/stable/_modules/torch/nn/modules/module.html#Module - https://wjunsea.tistory.com/61
1 2 3 4 5 6 7
# https://pytorch.org/docs/stable/_modules/torch/nn/modules/module.html#Module ... class Module: # 생략 def _call_impl(self, *input, **kwargs): # 생략 return result __call__ = _call_impl # <- 이게 있어서 m(input)으로 호출하면 __call__ 함수가 실행됩니다.
바아압
작성자
대학생 • 2023년 03월 15일
친절한 답변 정말 감사드립니다 ㅎㅎ 링크 참고할게요!!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!