[Day1] 2021/08/17
강의 리뷰
-PyTorch 1강: Introduction to PyTorch
-PyTorch 2강: PyTorch Basics
- Tensor: 다차원의 Arrays를 표현하는 Pytorch 클래스. 데이터타입은 numpy와 동일. GPU에 올려서 사용가능.
- reshape 대신 view
- squeeze : 차원의 개수가 1인 차원을 삭제
- unsqueeze : 차원의 개수가 1인 차원을 추가
- mm: 행렬곱셈 연산, broadcasting 지원하지 않음
- nn.functional 모듈을 통해 다양한 수식 변환 지원.
- backward : 자동 미분 지원
-PyTorch 3강: PyTorch 프로젝트 구조 이해하기
과제
: Custom Model 개발하기 - Pytorch의 tensor 조작과 Model 기본 구조 만들기
(시간을 많이 끌었던 부분 정리! 그 외는 과제 참고)
A = torch.Tensor([[1, 2],
[3, 4]])
indices = torch.tensor([0])
output = torch.index_select(A,1,indices)
output = A
indices = [0,1]
indices = torch.tensor(indices).unsqueeze(axis=-1)
output = torch.gather(output,1,indices)
output = torch.transpose(output,0,1)
피어세션
- 학습관련 Q&A
- SGD 구현에서 Label이 random shuffle되지 않고 sorted되어있더라도, SGD의 기본원리에 따라 학습이 잘 될까?: sigmoid함수의 특징 상 label이 동일하면 gradient값이 0이 되어 성능이 떨어질 것 같다.
- NN 구현에서 ReLU를 적용하면 음의 무한대로 발산하던데 이유를 모르겠다.: Activation Function을 바꾸면 learning rate도 바꿔줘야 한다. ReLU에서 편미분값이 양수일 때 lr이 너무 크다면 w, b를 너무 많이 줄이게 되면서 음의 무한대로 발산할 수 있다.
- 다른 캠퍼분의 Numpy로 Neural Network구현
: 진짜 멋있음...
마무리
- 특강(라이엇 게임즈 유석문 CTO) 개발자로 산다는 것
: 좋은 개발자가 되기 위해선 코드를 깔끔하게 쓰는 연습을 시작으로 하자.. 그리고 기 죽지말고 열심히 꾸준히 하라고 하셨다.
- 다른 캠퍼분께서 연휴동안 numpy로 NN을 구현한 것을 보고 감탄했고 경각심이 생겼다. 다들 열정 한가득이셔서 동기부여가 된다.
[Day2] 2021/08/18
강의 리뷰
-PyTorch 4강: Autograd & Optimizer
- nn.module
- 딥러닝을 구성하는 layer의 base class
- Input, output, forward, backward 정의
- 학습의 대상이 되는 parameter(tensor)정의
- nn.Parameter
- Tensor의 상속 객체
- nn.module 내에 attribute가 될 때는 required_grad = True로 지정되어 학습 대상이 되는 Tensor
- 대부분의 layer에는 weights 값들이 지정되어 있어 직접 지정할 일은 잘 없음
- Backward
- layer에 있는 parameter들의 미분을 수행
- forward의 결과값 (model의 output= 예측치)과 실제값간의 차이(loss)에 대해 미분을 수행
- 해당 값으로 Parameter 업데이트
- Backward from the scratch
- 실제 backward는 Module 단계에서 직접 지정가능
- Module에서 backward와 optimizer오버라이딩
- 사용자가 지접 미분 수식을 써야하는 부담 -> 쓸일은 없으나 순서는 이해할 필요가 있음
-PyTorch 5강: Pytorch Dataset
- Dataset 클래스
- 데이타 입력 형태를 정의하는 클래스
- 데이터를 입력하는 방식의 표준화
- Image, Text, Audio 등에 따른 다른 입력 정의
- Dataset 클래스 생성시 유의점
- 데이타 형태에 따라 각 함수를 다르게 정의함
- 모든 것을 데이터 생성 시점에 처리할 필요는 없음
:image의 Tensor변화는 학습에 필요한 시점에 변환
- 데이타 셋에 대한 표준화된 처리방법 제공 필요
- 최근에는 HuggingFace등 표준화된 라이브러리 사용
- DataLoader 클래스
- Data의 Batch를 생성해주는 클래스
- 학습 직전 데이터의 변환을 책임짐
- Tensor로 변환 + Batch 처리가 메인 업무
- 병렬적인 데이터 전처리 코드의 고민 필요
과제
: Custom Dataset 만들기 - Dataset을 구현해보고 dataloader로 조작해보기
(전체적인 내용은 과제에서 참고, 시간 많이 끌었던 부분만 정리!)
- 판다스 데이터를 가져올때는 판다스의 특성을 생각해야한다!!!! .iloc 주의!
def __init__(self, path, drop_features, train=True):
self.data = pd.read_csv(path)
.
.
.
for drop in drop_features:
self.data = self.data.drop(drop,axis = 1)
self.X = self.data.drop('Survived',axis = 1)
.
.
.
def __getitem__(self, idx):
X, y = self.X.iloc[idx], self.y.iloc[idx]
pass
return torch.tensor(X), torch.tensor(y)
- 데이터셋의 transform은 __getitem___에서!!
class MyMNISTDataset(Dataset):
def __init__(self, path, transform, train=True):
...
self.transform = transform
...
def __getitem__(self, idx):
X,y = self.transform(self.images[idx]), self.labels[idx]
return torch.tensor(X, dtype=torch.double), torch.tensor(y, dtype=torch.long)
피어세션
마무리
- 특강(라이엇 게임즈 유석문 CTO) Unit Test
: Unit Test의 개념을 처음으로 알게된 시간이였다. Unit Test라는 것은 직접 디버깅할 필요없이 코드 추가/수정할때 문제점을 직관적으로 찾을 수 있는 방법인데 아주 좋은 아이디어고, 활용해보고 싶다.
- 과...제가 갑자기 양이 너무 많아졌다.. 효율적 시간 분배가 필요해 보인다.
[Day3] 2021/08/19
강의 리뷰
-PyTorch 6강: 모델 불러오기
- model.save()
- 학습의 결과를 저장하기 위한 함수
- 모델 형태(architecture)와 파라메터를 저장
- 모델 학습 중간과정의 저장을 통해 최선의 결과모델을 선택
- 공유
- Checkpoints
- 학습의 중간 결과를 저장하며 최선의 결과를 선택
- earlystopping기법 사용시 이전 학습의 결과물을 저장
- loss와 metric값을 지속적으로 확인 저장
- 일반적으로 epoch, loss, metric을 함계 저장하여 확인
- colab에서 지속적인 학습을 위해 필요
- Transfer Learning
- 다른 데이터셋으로 만든 모델(pretrained)을 현재 데이터에 적용
- 대용량 데이터셋으로 만들었기때문에 모델 성능이 좋음
- freezing: pretrained model을 활용시 모델의 일부분을 frozen시킨다.
- Tensorboard와 weight&biases 로 print를 대체하자!
- Tensorboard: Tensorflow의 프로젝트로 만들어진 시각화 도구, 학습 그래프, metric, 학습결과를 시각화, Pytorch에서도 사용 가능.
- scalar: metric(ACC,Loss,Precision,Recall)을 epoch에 따라 표현
- graph: 모델의 computational graph 표시
- histogram: weight값 분포
- image: 예측값과 실제값을 비교 표시
- weight & biases
- 머신러닝 실험에 많이 쓰이며, 협업,code versioning, 실험결과 기록 등 제공, MLOps의 대표적인 툴로 저변확대중.
과제
: 화,목의 필수과제[Custom Model]과 필수과제[Custom Dataset] 마무리..
(정말 시간 많이 잡아 먹었다....)
피어세션
- 학습관련 Q&A
- dropout의 원리
- 알고리즘 문제풀이: DP (다른 캠퍼님)

마무리
- 마스터클래스 (최성철 교수님)
앞으로 알아야할 것 들-MLOPs 도구들
-당연히 데이터베이스 -Cloud
-AWS, GCP, Azure-Spark (+ Hadoop)
-Linux + Docker + 쿠버네티스
-스케줄링 도구들 (쿠브플로우, MLFlow, AirFlow)
- 개인 멘토링: 개인 솔루션을 받는 시간이였던 것 같다. 학습 내용도 어려운 것이 많지만 학습방법에 어려움이 있다고 생각했는데, 멘토님께서 질문에 대한 두려움을 깨주시면서 해결 의지가 생겨나서 너무 다행이다. 앞으로 질문 많이 해야지 ㅎ
[Day4] 2021/08/20
강의 리뷰
-PyTorch 8강: Multi-GPU 학습
GPU를 사용하는 방식은 Model parallel과 Data parallel이 있다.
- Model parallel: 모델의 병목, 파이프라인의 어려움때문에 잘 쓰지 않음.
- Data parallel: 데이터를 나눠 GPU할당후 결과의 평균.
- DataParallel - 단순한 데이터 분배후 평균. GPU 사용 불균형, batch size 감소
- DistributedDataParallel - 각 CPU마다 process 생성하여 개별 GPU에할당. DataParallel과 비슷하나 개별적 연산 평균.
-PyTorch 9강: Hyperparameter Tuning
- learning rate, 모델의 크기, optimizer등을 지정
- 학습 성능: 데이터 >> 모델 > Hyperparameter
- grid search, random search방법이 있지만 , 최근은 베이지안 기법이 쓰임.
- Ray: multi-node multi processing 지원 모듈. 병렬식.
-PyTorch 10강: Troubleshooting
- OOM이 왜,어디서 발생했는지 알기 어려움...
- batch size를 줄여보기.
- GPUtil을 통해서 상태를 확인하기.
- torch.cuda.empty_cache() 써보기.
- trainning loop에 tensor로 축적되는 변수 확인.
- 필요가 없어진 변수는 적절한 삭제가 필요.
- Inference시점에 torch.no_grad()사용.
과제
- 선택과제 Transfer Learning & Hyper Parameter Tuning
- 반복 강조된 부분: 분류 모델의 output 크기가 1000개로 되어 있음으로 mnist data class 개수로 나올 수 있도록 Fully Connected Layer를 변경하고 xavier uniform으로 weight 초기화
MNIST_CLASS_NUM = 10
mnist_resnet18.fc = torch.nn.Linear(in_features=512, out_features=MNIST_CLASS_NUM, bias=True)
torch.nn.init.xavier_uniform_(mnist_resnet18.fc.weight)
stdv = 1. / math.sqrt(mnist_resnet18.fc.weight.size(1))
mnist_resnet18.fc.bias.data.uniform_(-stdv, stdv)
피어세션
스페셜 피어세션
:이번 과제가 나만 시간 소요가 많았고 힘들었다고 생각했는데 다른 분들도 그렇다는 걸 알면서 자존감 회복이 되었다. 그렇다고 안심하고 있지만은 말 것! 그리고 다른 조는 논문리뷰?도 하시는 것 같은데 좋은 학습방법 같았다.
팀 피어세션
- 팀 회고록 작성
: 개인별 발표하고 싶은 내용을 연구해오셔서 너무 감사했고 동기부여 또한 됐다.
- P stage를 더 효율적으로 할 수 있기 위한 계획
마무리
- 오피스아워: 필수과제 및 선택과제 해설
- 어제 과제하느라 잠을 거의 못 잤는데 다른 피어분들의 동지애?(나만 느끼는 건지 모르겠지만 )덕분에 정신차리고 할 수 있었던 것 같다. 다음 주 부터는 Pstage에 들어서는데 다들 서로를 위해서 한가지씩 공부해오기로 하셨다.. 나는 정하지 못 했지만 주말동안 계획을 세워봐야겠다. 다음주도 파이팅있게 잘 할 수 있길..!