Convolutional Neural Network for CIFAR-10
CIFAR-10은 RGB 32x32
짜리 이미지이다.
이미지 카테고리는 아래와 같다. 10개여서 CIFAR-10인것이다.
airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck.
공식 사이트는 다음과 같다.
CIFAR-10 dataset
큰 이미지로 바로 테스트 하기 어렵기 때문에 일단 작은 이미지로 modeling을하고 테스팅을 해본다.
Higlights of the Tutorial
핵심 기술은 모두 AlexNet paper에 나온 것들이다.
- convolution
- rectified linear activations
- max pooling
- local response normalization
Model Architecture
기본적으로 Alex Krizhevsky
의 모델을 따르며 위에 계층만 약간 튜닝한 형태를 가진다.
몇시간 동안 트레이닝을 했을 때의 최대 정확도는 86%이다.
코드의 구성
cifar10_input.py
Reads the native CIFAR-10 binary file format.cifar10.py
Builds the CIFAR-10 model.cifar10_train.py
Trains a CIFAR-10 model on a CPU or GPU.cifar10_multi_gpu_train.py
Trains a CIFAR-10 model on multiple GPUs.cifar10_eval.py
Evaluates the predictive performance of a CIFAR-10 model.
Model Training
Prediction을 위해서 n-way classification을 수행 한다.
multinomial logistic regression 또는 softmax regression으로 알려져 있다.
- batch size는 128로 수행
- learning rate $10^5$
Launching and Training the Model
아래의 명령어로 실행 한다.
python3 cifar10_train.py
맨 처음에는 이미지 데이터가 없기 때문에 다운로드 부터 시작한다. 데이터 셋은 약 160MB이다.
모델링은 약 몇시간 걸린다.
레퍼런스 성능은 아래와 같다.
System | Step Time (sec/batch) | Accuracy
------------------------------------------------------------------
1 Tesla K20m | 0.35-0.60 | ~86% at 60K steps (5 hours)
1 Tesla K40m | 0.25-0.35 | ~86% at 100K steps (4 hours)
default가 1000k steps니 왠만하면 값을 주고 training하는것이 좋다.
GTX 1080 기준으로 1 step당 0.05
인것 같다.
2017-03-03 17:26:35.188576: step 353720, loss = 0.16 (2436.1 examples/sec; 0.053 sec/batch)
2017-03-03 17:26:35.725523: step 353730, loss = 0.14 (2291.4 examples/sec; 0.056 sec/batch)
2017-03-03 17:26:36.253775: step 353740, loss = 0.18 (2391.7 examples/sec; 0.054 sec/batch)
2017-03-03 17:26:36.781440: step 353750, loss = 0.15 (2413.0 examples/sec; 0.053 sec/batch)
2017-03-03 17:26:37.313428: step 353760, loss = 0.15 (2395.6 examples/sec; 0.053 sec/batch)
결국 128 batch size로 1 step당 0.05
초 정도 소요된다.
Evaluating a Model
Testing을 위해서 10,000
장의 의미지를 사용 한다.
python cifar10_eval.py
레퍼런스 기준으로 precision 1 = 0.860
이라고 한다.
jemin@jemin-desktop:~/tf_examples/models/tutorials/image/cifar10$ python3 cifar10_eval.py
2017-05-18 14:15:00.822222: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 with pro perties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.797
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 7.66GiB
2017-05-18 14:15:00.822247: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0
2017-05-18 14:15:00.822253: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0: Y
2017-05-18 14:15:00.822258: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow dev ice (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
2017-05-18 14:15:02.951141: precision @ 1 = 0.866
참고 문헌
Tensorflow tutorial, convolutional neural networks
CNN
Convolutional Neural Networks
'AI > TensorFlow, PyTorch, Keras, Scikit' 카테고리의 다른 글
Confusion Matrix in python (0) | 2017.08.03 |
---|---|
Tensorflow Object Detection API (SSD, Faster-R-CNN) (0) | 2017.07.16 |
Hands on TensorBoard TensorFlow Dev Summit-2017 (0) | 2017.03.15 |
Transitioning to TensorFlow 1.0 (0) | 2017.02.28 |
Tensor Board (0) | 2017.02.08 |