일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 웹
- 프로그래머스
- 4기
- 웹 프로그래밍
- AI Tech 4기
- QNA 봇
- Naver boostcourse
- 2021 Dev-matching 웹 백엔드 개발자
- 서블릿
- 부스트캠프
- P Stage
- sts
- 구현
- 장고
- 서버
- 파이썬
- Naver boostcamp
- cs50
- 레벨2
- 백엔드
- 네이버
- BOJ
- 백준
- 풀스택
- boostcourse
- Customer service 구현
- AI Tech
- 대회
- Django
- 프로그래밍
- Today
- Total
daniel7481의 개발일지
20220929 2주차 목요일 회고 본문
피어세션
오늘은 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님 블로그를 보아서 쉽게 이해가 되었다. 정리가 정말 잘 되어있다.
공부 회고
오늘은 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 |