pytorch 코드 질문이요!

조회 104

안녕하세요 파이토치를 공부하고 있는 대학생입니다 파이토치 코드를 공부하다보면 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 클래스르 상속 받아서 가능한 것인가요? 파이토치 문서를 봐도 이해가 되지 않아 질문드립니다

구체적이고 정성스러운 질문에 Up 투표를 눌러주세요.

설명이 부족한 질문에 Down 투표를 눌러주세요. 커리어리가 질문자에게 수정을 요청할게요.

답변 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# https://pytorch.org/docs/stable/_modules/torch/nn/modules/module.html#Module ...
2class Module:
3  # 생략  
4  def _call_impl(self, *input, **kwargs):
5    # 생략
6    return result
7  __call__ = _call_impl # <- 이게 있어서 m(input)으로 호출하면 __call__ 함수가 실행됩니다.
바아압님의 프로필 사진

바아압

작성자

대학생3월 15일

친절한 답변 정말 감사드립니다 ㅎㅎ 링크 참고할게요!!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.