daniel7481의 개발일지

20220929 2주차 목요일 회고 본문

AI Tech 4기/Level1

20220929 2주차 목요일 회고

daniel7481 2022. 9. 29. 19:30
반응형

피어세션

오늘은 dp 문제 기본 중에 기본이라고 할 수 있는 파보나치 수열 문제를 풀었다. 풀이 방법은 다들 알거라고 생각한다. 오늘 기본 과제 제출 날짜이기 때문에 기본 과제 완료 후 제출하고, 남는 시간에 신청한 공모전 자료조사를 진행하기로 하였다. 오늘의 챌린지는 오늘 하루 부덕이를 프사로 하기였고, 나는 슬랙에서 내 프사를 부덕이로 바꿨다. 참고로 부덕이는 AI Tech 부캠의 마스코트다. 피어세션 시간에는 심화 과제 1을 같이 보았다. 문제를 보던 중 Linear Layer에서 bias를 초기화 할 떄 uniform 초기화해줄려고 하였는데, 입력 피처의 개수를 알아야 할 때 parameter의 size의 1번쨰 인덱스를 가져오는 것이 이해가 되지 않았다. 입력 피처를 가져오려면 당연히 첫 번쨰 인덱스여야 할텐데... 하다가 Linear Layer를 직접 구현해보았을 때 생각이 났다. wx + b를 계산해줄 떄 torch.addmm 함수를 사용하게 되는데, 여기서 b차원에 맞춰주기 위해 b + x @ w.T가 된다. w가 transpose되었기 때문에 입력/출력 차원이 바뀌어서 1번쨰 인덱스를 가져온 것이었다.

stdv = 1/np.sqrt(mnist_resnet18.fc.weight.size(1))
mnist_resnet18.fc.bias.data.uniform_(-stdv, stdv)

parameter initializing에 대해서는 https://koreapy.tistory.com/1318 koreapy님 블로그를 보아서 쉽게 이해가 되었다. 정리가 정말 잘 되어있다.

 

[딥러닝 기초] Xavier/He 초기화

1) 시그모이드류 Activation Func의 초기화: Xavier 초기화 2) ReLu의 초기화: He 초기화 ▼  출처: https://wooono.tistory.com/223 가중치 초기화의 중요성 Gradient Vanishing 문제란, MLP를 학습시키는 방..

koreapy.tistory.com

공부 회고

오늘은 custom dataset과 dataloader를 만들어 보았다. 사실 모델을 훈련시키는 것 만큼이나 dataset을 만드는 과정 또한 복잡하다. 이 기회에 확실히 배워야겠다는 생각이었다. 

  • dataset은 __init__(), __len__(), __getitem__() 세 가지 매직 함수를 가지고 있다. __init__은 말 그대로 생성자이고, 데이터의 위치나 파일명과 같은 초기화 작업을 해준다
  • __len__() 함수는 Dataset의 최대 요소 수를 반환하는데 사용되고, 데이터를 로드할 때 어디까지 로드해야할 떄 필요하다고 한다.
  • __getitem__()은 데이터셋에서 i 인덱스로 값을 가져올려고 할 떄 사용된다. 대부분의 전처리는 이 단계에서 이뤄지는데, 필요한 값을 호출 할 떄 전처리를 함으로써 __init__에서 모든 데이터를 전부 전처리르 해서 메모리 낭비가 일어나지 않게 할 수 있다.
  • DataLoader에는 다양한 파라미터가 있다.
DataLoader(dataset,            # Dataset 인스턴스가 들어감
           batch_size=1,       # 배치 사이즈를 설정
           shuffle=False,      # 데이터를 섞어서 사용하겠는지를 설정
           sampler=None,       # sampler는 index를 컨트롤
           batch_sampler=None, # 위와 비슷하므로 생략
           num_workers=0,      # 데이터를 불러올때 사용하는 서브 프로세스 개수
           collate_fn=None,    # map-style 데이터셋에서 sample list를 batch 단위로 바꾸기 위해 필요한 기능
           pin_memory=False,   # Tensor를 CUDA 고정 메모리에 할당
           drop_last=False,    # 마지막 batch를 사용 여부
           timeout=0,          # data를 불러오는데 제한시간
           worker_init_fn=None # 어떤 worker를 불러올 것인가를 리스트로 전달
          )
  • 흔히 사용되는 것은 dataset, batch_size, shuffle, sampler, num_workers, collate_fn 정도가 있겠다.
  • iris, Mnist, AGNews, Titanic 데이터 등을 가져와서 데이터셋과 데이터로더를 직접 만들어봄으로써 둘이 어떻게 작동하는지, 어떤 역할을 하는지 확실하게 알 수 있었다.
반응형

'AI Tech 4기 > Level1' 카테고리의 다른 글

20221004 3주차 화요일 회고  (1) 2022.10.04
20220930 2주차 금요일 회고  (1) 2022.09.30
20220928 2주차 수요일 회고  (0) 2022.09.29
20220927 2주차 화요일 회고  (1) 2022.09.27
20220926 2주차 월요일 회고  (0) 2022.09.27