# 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까지)