회사 딥러닝 교육의 선수과목이래서 들어본 코스. DNN, CNN, RNN을 다루며 약 9시간 분량의 동영상 강의와 각 단원 마다 관련한 프로젝트를 하도록 강좌가 이루어져 있다.
일단 동영상 강의는 모두의 딥러닝 시즌2를 기반으로 하고 있다. 실제로 유튜브에서 동일한 목차와 내용의 동영상 강의를 확인할 수 있다. 모두의 딥러닝 시즌2 강의는 어차피 모두의 딥러닝 시즌1 강의가 기존에 있는 만큼 설명이 오래 필요한 내용 (예를 들면 역전파, ResNet의 구조)은 시즌1 영상을 참조하라고 안내를 해주고 실제 네트워크를 PyTorch로 구현할 때 주의해야 할 점을 좀 더 강조해서 알려주는 느낌이다.
단원마다 강의하시는 분들이 다 달라서 내용의 편차가 있지 않을까 했는데 다들 설명도 잘하시고 가르쳐주시는 내용도 실용적이어서 좋았다. 그 중에서 유독 좋았던 클립 몇 개만 꼽아보면
전반적으로 수업을 들으면 바닥부터 이해는 아니더라도 PyTorch를 이용해서 원하는 데이터를 기본적인 모델에 넣을 수는 있게 되도록 강좌가 구성되어 있다.
프로젝트는 각 단원에서 배운 네트워크 (DNN, CNN, RNN)을 특정 데이터셋에 써먹는 내용으로 되어 있다. 기본적으로 Jupyter Notebook과 데이터셋, 그리고 자가 점검을 위한 스크립트로 구성된 압축 파일을 받아서 혼자 빈칸을 채우는 방식으로 프로젝트가 진행된다. 우선 Jupyter Notebook을 Colab에서도 돌릴 수 있도록 관련 함수 (구글 드라이브 연동) 을 넣어준 것이 최대 장점이라고 생각한다. 이런 강좌를 들으면 항상 일반 Fully Connected Network 까지는 노트북 CPU에서 잘 돌아가다가 다음 단원의 CNN 부터는 트레이닝이 좀 많이 느려지는 문제가 생기는데 Colab을 사용하면 GPU를 사용할 수가 있으니 쾌적하게 프로젝트를 따라갈 수 있었다. 점검 함수를 두어서 사소한 실수로 진행이 턱 막히는 점을 방지하는 점, 블록마다 실제 PyTorch 문서 링크를 달아준 점도 프로젝트를 따라가는데 정말 큰 도움이 되었다. 다만 제공되는 코드에 아주 사소한 오류들이 있었는데 이 부분은 맨 아래에 따로 정리를 하도록 하겠다.
제목인 파이토치로 시작하는 딥러닝 기초
을 정말 잘 알려주는 강좌이다. 예전에 학교 수업도 들어보고, cs231n 수업 영상도 들어봤는데 PyTorch와 관련된 영역에 대해서는 확실히 엣지가 있다고 느꼈다. 100% 한국어로 제공되있는 것도 분명 장점이다.
다만 시기적으로 딥러닝을 공부해야 하는 사람이면 이미 이 정도 내용은 다 알고 있지 않을까…하는 생각이 들기는 하는데 덕분에 나같은 사람이 잘 공부를 할 수 있고, 또 원래 지식이란 것이 원래 점점 보편화가 되는 것이니 이 강의는 그 역할을 충분히 하고 있다고 생각한다.
check_util/checker.py
에 63번째 줄에 보면 아래와 같은 코드가 있는데 2000이 아닌 {}
여기 부분에서 괄호 안을 len(dataset)
으로 채워줘야 실행시 오류가 나지 않았다.
try:
if len(dataset) != 2000:
print(f'{dataset.mode}의 __len__ 함수가 train_data의 데이터 갯수를 2000이 아닌 {}으로 반환하고 있습니다. 가지고 있는 데이터셋 또는 __len__함수 구현에 문제가 없는지 다시 확인하시기 바랍니다.'.format(len(dataset)))
len_flag = False
노트북의 6. 베이스라인 성능 측정
에 보면 아래와 같은 블록이 있다
for i in range(15):
data_idx = np.random.randint(len(test_data))
pred = test_data[data_idx][0][-1, 0]
pred = pred * std[0] + mean[0] # 예측 기온을 normalization 이전 상태(섭씨 단위)로 되돌리는 작업
target = test_data[data_idx][1][0] * std[0] + mean[0] # 실제 기온을 normalization 이전 상태(섭씨 단위)로 되돌리는 작업
print('예측 기온: {:.1f} / 실제 기온: {:.1f}'.format(pred, target))
여기서 std
, mean
을 전역 변수에서 가져오는데 저런 전역 변수를 정의한 적이 없으므로 에러가 난다. 대신에 test_data.std[0]
, test_data.mean[0]
을 사용하자 (아래 블록에도 비슷한 내용이 있는데 여기는 맞게 되어 있다)