이번 주는 그래도 조금 재미있어지려고 하는 것 같다.
과제는 많지만 과제하면서 모델과 데이터에 대해 익히고
pytorch 사용법도 조금씩 알게 되면서 적응하려고 하는 단계인 것 같다.
과제하는데 오래 걸려서 밤새기는 했지만 재미있었다.
공부한 내용
1. 모델 불러오기
1.1. 모델 저장
• model.save()
- 학습 결과 저장
- Parameter 저장
- 모델 저장시 ordered_dict 사용
- 모델 저장시 .pt 확장자 사용 권장
• load_state_dict
- 같은 architecture의 모델에서 parameter만 불러올 때 사용
• torch.save(model)
- 모델의 architecture도 함께 저장
- 보통 architecture는 코드로 공유
1.2. Checkpoints
- 학습의 중간 결과 저장
- epoch, loss, metric 값을 함께 저장하여 학습 단계에 따라 성능 확인
1.3. Pretrained Model
• Tranfer learning
- 다른 dataset으로 만든 기존의 모델 사용
- ImageNet, GPT 등 대용량 dataset으로 만든 모델을 작은 dataset에 적용하면 좋은 성능
- 현재 가장 일반적인 학습방법으로, hyper parameter 등 일부만 변경하여 사용
- NLP는 Huggin Face가 사실상 표준
• Freezing
- Pretrained model 사용시 모델의 일부 layer freeze
- frozen weight는 parameter 고정
- stepping frozen : 단계별로 frozen weight를 점진적으로 바꿔가며 학습
- 경우에 따라 사용할 dataset에 맞게 마지막 layer 추가
2. Monitoring tools for PyTorch
: 학습 과정 모니터링, 학습 결과 tracking 위한 tool
2.1. Tensorboard
- tensorflow 기반의 시각화 도구로, computational graph, metric, 학습 결과 등 시각화
- PyTorch에서도 사용 가능
- scalar, graph, histogram, image, text, mesh 등 다양한 유형의 시각화 지원
- Tensorboard 사용법
2.2. WANDB (Weight and Biases)
- ML/DL 실험이나 사용을 원활히 하기 위한 도구로, MLOPS 도구 중 하나
- code, model, data 부분 나눠서 code versioning 가능
- WANDB 사용 방법
- 새로운 도구들에 도전해보는 것은 스스로 성장할 기회
3. 필수과제 2
3.1. Dataset
• 기본 구성 요소 : __init__, __len__, __getitem__
• 추가 요소 : transform
3.2. iris dataset 제작
• pandas
3.3. DataLoader
• 기본 구성 요소 : dataset, batch_size, shuffle, sampler(batch_sampler), num_workers, collate_fn, pin_memory, drop_last, time_out, worker_init_fn
• collate_fn 작성
- list comprehension : length 구하기
- torch.nn.functional.pad : zero padding
3.4. torchvision
• transform methods
- Resize(size)
- RandomCrop(size)
- RandomRotation(degree)
- RandomVerticalFlip(probability)
- Compose(transforms_list)
3.4. Mnist Dataset
- torchvision의 dataset
- CIFAR-10 dataset loading
3.5. AG_NEWS
- torchtext의 dataset
- methods : tokenizer, Counter, vocab, encode, decode, to_bow
- document-term matrix 개념:
https://stackoverflow.com/questions/43154039/how-to-calculate-term-document-matrix
- CountVectorizer 설명:
3.6. Titanic Dataset and DataLoader
- features : Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked
- classes : PassengerId, Survived
- 참고 자료 :
https://www.kaggle.com/c/titanic/data
https://cyc1am3n.github.io/2018/10/09/my-first-kaggle-competition_titanic.html
https://towardsdatascience.com/kaggle-titanic-machine-learning-model-top-7-fa4523b7c40
3.7. Mnist Dataset and DataLoader
- __repr__ 사용법
- transform 적용
- self.classes : set말고 다른 방법으로 가능한지 모르겠음
3.8. AG_NEWS Dataset and DataLoader
- self.X : 마지막에 to_bow 함수에서 계속 에러가 발생해서 _preprocess 통해 처리한 결과를 저장했더니 오류가 해결됐는데 맞는 방법인지 잘 모르겠음
- 마찬가지로 set으로 self.classes 정의
- _preprocess : re.findall 사용, join해서 string으로 리턴하지 말아야 한다.
4. 피어세션
4.1. 과제 리뷰
- gather : expand 사용법, 차원 맞추는 방법, index구하는 방법, gather 사용법, index 구하는 방법, squeeze
- numpy에 squeeze 있나? : numpy reshape 사용
- AG news dataset encoder 에러 : 대문자가 포함된 상태로 vocab 만들어진 것 같다., init에서 preprocess 적용
- tokenizer 분류 기준 ? : split과 비슷한 것 같다.
- backward hook에서 grad가 무엇? : back propagation 과정에서 전달되는 grad
- hook? : forward나 backward 과정에서 추가로 할 수 있는 작업
- register_hook 사용 : model의 parameter에 hook 등록
- dataset_random에서 n_features = 2로 하면 왜 data_list가 tensor로 변하지 않는지? : tensor 안에 scalar? list? 잘 모르겠다.
- collate_fn에서 리스트를 나눴다가 다시 합치는 이유 : data끼리, label끼리 묶기 위해 나눠야 한다.
- num_workers 수는 높여도 더 느린 건 컴퓨터 성능 탓? : user, system 둘 다 늘어남 - colab 환경이라 그런 듯
- collate_fn에서 zero padding 방법 : nn.functional.pad 사용 or cat 사용
4.2. 논문 리뷰
- 다음주부터 진행
- 이번 주에 멘토님과 진행해보고 방식 정하기
- 읽는 순서 : abstract -> conclusion -> 본문
- 논문 읽고 참고 문헌 순서대로 읽어보는 것도 좋다.
- paper with code : 논문구현한 코드 및 설명 -> 참고하면서 공부하면 좋을 듯
https://paperswithcode.com/method/resnet
- 논문 다 볼 필요 없이 발췌해서 보는 방법도 있다.
- 도메인 결정 여부
- tensorboard와 wandb 대회에서 연동하면 좋을 것 같다. -> 시각화해서 공유
- tqdm 사용했는지
- colab 코드 숨기기 단축키 지정하면 편하게 사용 가능
5. 마스터클래스 - 최성철 교수님
- 최성준 교수님 강의는 어려운 내용이었다.
- Industry에서 AI 어떻게 적용할 수 있을까 고민
- 앞으로 어떤 형태의 AI 공부를 해야할지
- 코딩 능력도 중요하지만 기본적으로 컴퓨터 잘 다루는 엔지니어링 역량 필요
- 모델보다는 데이터 중심으로 AI system 개발하는 방향
- 현업에서는 문제정의와 deployment가 중요
- Data drift -> Dynamic hyperparameter tuning
- Data Feedback Loop
- ML/DL 관련 도구들에 익숙해지고 사용할 수 있는 능력 필요
'BoostCamp' 카테고리의 다른 글
2021.08.23 - [Week 4] Day 1. 대회 시작 (0) | 2021.08.23 |
---|---|
2021.08.20 - [Week 3] Day 4. - (0) | 2021.08.21 |
2021.08.18 - [Week 3] Day 2. (0) | 2021.08.19 |
2021.08.17 - [Week 3] Day 1. 거북이 (0) | 2021.08.18 |
2021.08.13 - [Week 2] Day 5. 나는 멍청이다. 나는 멍청이다. 나는 멍청이다. (0) | 2021.08.13 |