개발자

pytorch 코드 질문이요!

2023년 03월 14일조회 138

안녕하세요 파이토치를 공부하고 있는 대학생입니다 파이토치 코드를 공부하다보면 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일

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

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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