🐥 Autograd & Optimizer
pytorch를 활용한 딥러닝 연산의 핵심은 autograd이다.
자동 미분이 되도록 설정해두면 알아서 편미분을 해서 각 변수별로 업데이트까지 수행한다.
❓어떻게 하면 자동 미분을 설정할 수 있을까
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='')
데이터의 타입에 따라 형태를 다르게 해야 하기 때문에 필요한 경우 해당 데이터와 목적에 맞는 데이터 로더를 별도로 만들어
볼 수도 있어야 겠다.
✊ 새로웠던 것들
nn.Identity: input tensor와 동일한 tensor를 반환
행으로 된 1d tensor가 열 1d tensor보다 연산이 쉽다.
hook: 기존 파이썬 패키지에 사용자의 함수를 custom하여 사용할 수 있도록 제작한 interface
in-place operation: 텐서의 특정 인덱스를 어떤 값으로 치환하는 연산
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.