[D+7] 학습 내용

siwoo·2023년 11월 14일
0

🐥 Autograd & Optimizer

pytorch를 활용한 딥러닝 연산의 핵심은 autograd이다.
자동 미분이 되도록 설정해두면 알아서 편미분을 해서 각 변수별로 업데이트까지 수행한다.

❓어떻게 하면 자동 미분을 설정할 수 있을까

torch.nn.parameter.Parameter

Parameter(data = None, requires_grad = True)

data(Tensor): 파라미터가 될 텐서
requires_grad(bool): 자동미분 여부

위와 같이 파라미터를 선언해주고
model.backward()
를 하게 되면 변수는 Loss에 대한 미분 값에 따라 업데이트된다.

💥 모델 학습 시 유의사항

미분 값은 누적되도록 하는 것이 기본 설정이다.
즉 배치 학습 시작될 때 이전 학습 때의 미분 값으로 누적하지 않으려면
optimizer.zero_grad()
설정이 매번 학습 초기마다 선언되어야 한다.

🌟 Data Loader

데이터의 용량이 크지 않다면 한 번에 데이터를 로드하여 딥러닝 연산을 수행해도 괜찮을 것이다.
하지만 데이터 용량이 커지면 데이터를 한 번에 로드하는 것 자체가 어려울 수 있다.

따라서 데이터의 입력 형태를 지정하여 모델에 iterable하게 배치 사이즈 만큼의 데이터를 한 번에 하나씩 올려서 처리하자는 아이디어가 나왔고 그것을 구현한 것이 바로 Data Loader이다.

CLASS torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=None, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None, generator=None, *, prefetch_factor=None, persistent_workers=False, pin_memory_device='')

데이터의 타입에 따라 형태를 다르게 해야 하기 때문에 필요한 경우 해당 데이터와 목적에 맞는 데이터 로더를 별도로 만들어
볼 수도 있어야 겠다.

✊ 새로웠던 것들

  1. nn.Identity: input tensor와 동일한 tensor를 반환

    • 왜 쓰는가?
      조건에 따라서 어떤 경우에는 input에 변형을 주고, 혹은 변형을 주지 않고 그대로 내보내는 경우도 있다. nn.Sequential과 함께 사용하며 조건에 따라 input을 변형할 때 사용하는 듯하다.
  2. 행으로 된 1d tensor가 열 1d tensor보다 연산이 쉽다.

  3. hook: 기존 파이썬 패키지에 사용자의 함수를 custom하여 사용할 수 있도록 제작한 interface

    • 사용자의 의도 2가지?
      -> 프로그램 실행 로직 분석
      -> 프로그램에 기능 추가
  4. in-place operation: 텐서의 특정 인덱스를 어떤 값으로 치환하는 연산

    • 기울기가 계산되는 leaf node에서는 in-place operation을 하면 안 된다. 만약 leaf node에서 in-place operation을 해야 할 일이 있다면 torch.no_grad()를 먼저 선언해서 requires_grad = False가 되도록 만들어 연산이 가능하도록 만들 수는 있다.

1개의 댓글

comment-user-thumbnail
2023년 11월 14일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기