7-17 구글 Colabo에서 PyTorch CIFAR-10 이미지 GPU 머신 러닝 I
CIFAR-10 PyTorch 쥬피터 노트북(Jupyter Notebook)예제를 구글 Colabo에서 다루어 보자. 쥬피터 노트북에서 실행이 잘되면 Colabo에서 실행도 아무런 문제가 없을 것이지만 단 학습과 테스트를 위한 데이터 파일을 Colabo 맞춰 준비해주고 런타임에서 유형을 GPU 로 설정해주면 실행이 된다.
10개의 class 로 구인된 6만개의 이미지인 CIFAR-10 는 MNIST와 마찬가지로 5만개는 학습용이고 1만개는 테스트용이다. 각각의 이미지는 3X32X32로 주어진다. 맨 앞의 3X의 3은 Convolutional Neural Network 처리를 위한 RGB 컬러 색상을 뜻한다. 32X32 해상도이면 MNIST 흑백 문자 데이터이면 충분하지만 컬러 실물 사진은 아주 흐릿하여 간신히 인간의 눈으로 인식할 수 있는 정도이다. 판독율이 나쁠 수도 있다.
사진 이미지를 대상으로 하는 CNN(Convolutional Neural Network) 학습에서 가장 어려운 점의 하나는 CNN 구조가 복잡하여 각 레이어별로 어떤 효과가 있는지 이해하기가 어렵다는 점이다. 따라서 CNN의 이해를 돕기 위해서는 적절한 이미지 예제를 선택 사용해야 하는데 유튜브에서 찾아 볼 수 있는 Brabdon Rohrer의 “How Convolutional Neural Networks work”의 “OX” 예제가 대단히 효과적일 수가 있다. “OX” 중 특히 “X”를 사용한 설명이 쉽게 이해에 많은 도움을 준다. Brabdon Rohrer의 CNN 학습 원리를 해설하고 있는 필자의 저서 6장의 CNN 해설 편을 참조하도록 하자.
PyTorch 튜토리알의 Trainning a Classifier 코드의 구글 Colabo에서 GPU 르 사용하여 실행하기 위한 아래의 5 단계를 살펴보자.
- torchvision을 사용하여 CIFATR10 학습용 및 테스용 이미지를 load하고 크기를 일정하게 normalization 작업을 한다.
- CNN 루틴을 설정한다.
- Loss 함수를 설정한다.
- trainning 데이터 사용 학습을 시킨다.
- test 데이터 사용 학습을 시킨다.
구글 Colabo Untitles.ipynb 의 파일명을 rename하고 런타임에서 GPU 모드로 설정 연결하자.
CIFAR10 Loading Normalization
torch 라이브러리는 기본적으로 불러드여야 하며 이미지를 처리하기 위해서는 torchvision 도 필수적이다. 아울러 이미지 크기 조절을 하려면 torchvision.transforms 도 불러야 한다.
torchvision의 PIL(Python Imaging Library)이미지는 [0,1] 사이의 픽셀 값을 가지므로 변환(transforms)에 의해서 표준화된(normalized)[-1, 1] 사이의 텐서값을 가지도록 변환하자. 그 다음 학습을 위한 이미지 데이터 파일 다운로드 작업을 해야 하는데 그냥 아래 코드를 실행하면 자동적으로 성공적인 다운로딩이 이루어진다.
자동적으로 toronto 모 대학으로부터 다운로드 되었음이 확인되었다는 메시지가 뜬다. CIFAR10 예제의 데이터 파일을 다운 받아 압축을 풀고 직접적으로 설치 작업을 할 필요가 없다. 참고로 터론토 대학에서는 CIFAR-10 말고도 MNISt 라든지 ImageNet을 포함 여러 종류의 이미지 데이터베이스를 torchvision.datasets.∙∙∙ 명령 형태로 불러 올 수 있다. 이 점에 관해서는 터론토 대학과 공동으로 PyTorch게발이 이루어진 듯하다.
데이터 다운로딩까지 성공적으로 이루어졌으면 나머지 과정은 쥬피터 노트북에서처럼 셀별로 복사 후 Colabo에서 실행시키면 된다.
다음 블로그에서 학습과정 알고리듬을 살펴보기로 하자.