# 210818 피어세션
## Further Question
- 1 epoch에서 이뤄지는 모델 학습 과정을 정리해보고 성능을 올리기 위해서 어떤 부분을 먼저 고려하면 좋을지 같이 논의해보세요
- optimizer? loss?
- optimizer.zero_grad()를 안하면 어떤 일이 일어날지 그리고 매 batch step마다 항상 필요한지 같이 논의해보세요
- Pytorch에서는 gradients값들을 추후에 backward를 해줄때 계속 더해준다.
- https://algopoolja.tistory.com/55
- 갱신을 시키면 값이 buffer에 덮어씌워지는 것이 아니라 누적이 된다.
- 역전파 단계 전에, optimizer 객체를 사용하여 (모델의 학습 가능한 가중치인) 갱신할 변수들에 대한 모든 변화도(gradient)를 0으로 만듭니다. 이렇게 하는 이유는 기본적으로 .backward()를 호출할 때마다 변화도가 버퍼(buffer)에 (덮어쓰지 않고) 누적되기 때문입니다. 더 자세한 내용은 torch.autograd.backward에 대한 문서를 참조하세요.
- 왜 zero_grad()를 자동으로 안해줄까? step()하고 알아서 해주면 편할거같은데. 값이 필요할때가 존재하는 경우가 있는건가 => 멘토님찬스
- DataLoader에서 사용할 수 있는 각 sampler들을 언제 사용하면 좋을지 같이 논의해보세요! => 학습 후 논의
- SequentialSampler : 항상 같은 순서
- RandomSampler : 랜덤, replacemetn 여부 선택 가능, 개수 선택 가능
- SubsetRandomSampler : 랜덤 리스트, 위와 두 조건 불가능
- WeigthRandomSampler : 가중치에 따른 확률
- BatchSampler : batch단위로 sampling 가능
- DistributedSampler : 분산처리 (torch.nn.parallel.DistributedDataParallel과 함께 사용)
- 데이터의 크기가 너무 커서 메모리에 한번에 올릴 수가 없을 때 Dataset에서 어떻게 데이터를 불러오는게 좋을지 같이 논의해보세요!
- generator에 넣어서
- 데이터 자체를 batch로 불러온다.
## 궁금한점
- Tensor와 tensor의 차이가 뭘까요?
- class와 function의 차이
- buffer을 왜쓸까요?
- nn.Linear와 nn.LazyLinear 차이와 LazyLinear 사용 이유
- LazyLinear은 input을 받지 않는다. input은 정해져 있기때문에 자동적으로 할당해준다.
- 그런데 최신기능이라 그런지 안정화버전에서는 지원이 안되는거 같다.
- hook과 pre_hook의 차이
- pre_hook => forward => hook
- Identity는 어떤 역할을 하는 것인가?
- 잘 모르겠다..?
- list로 할당하지 않고 generator를 사용하는 이유
- 메모리 효율을 위해서 (list를 만들면 할당하는 순간 메모리 공간을 차지하기 때문)
- nn.Softmax() 또는 nn.functional.softmax() 사용해서 출력의 합이 1이되도록 만드는 방법
## 내일
화요일 과제 + 수요일 과제 (optional까지)