이번 포스팅에서는 코랩 사용법 및 코랩 딥러닝 입문에 대한 마지막 글로 실질적으로 코랩 딥러닝을 사용한 MNIST 데이터셋 활용 손글씨 숫자 분류 코드를 작성해볼 예정입니다.
참고로 앞선 2개의 포스팅에서 기본적인 코랩 사용법에 대해 가입 방법과 기본 설정 (런타임 설정) 방법과 함께 코랩 스니펫과 기본 단축키, 주요 기능에 대해 정리한 바 있습니다.
이번 포스팅에서는 코랩 사용법 및 코랩 딥러닝에 대한 마지막 글로, 코랩에서 딥러닝을 수행할 때의 장점에 대해 알아보고 TensorFlow와 Keras 설치 및 사용법에 이어 MNIST 데이터셋을 활용한 손글씨 숫자 분류 코드를 실제 예시코드로 작성해보도록 하겠습니다.
코랩 딥러닝 수행 장점
코랩에서 딥러닝을 수행하면 여러 가지 장점이 있는데요, 이를 4가지로 정리하면 아래와 같습니다.
- 구글의 고성능 컴퓨팅 자원 사용: 코랩은 구글의 클라우드 기반 서비스로, 고성능의 GPU와 TPU를 무료로 사용할 수 있습니다. 이는 딥러닝 모델을 학습할 때 소요되는 시간을 크게 단축시켜줍니다. 비유하자면, 코랩은 마치 공유 자전거와 같습니다. 고가의 자전거를 직접 구매할 필요 없이, 필요할 때 공유 자전거를 사용하여 목적지에 빠르게 도달할 수 있습니다.
- 접근성과 편리성: 코랩은 웹 브라우저를 통해 언제 어디서나 접근할 수 있습니다. 따라서 별도의 개발 환경을 구축할 필요가 없으며, 여러 장치 간에 쉽게 작업을 공유하고 이어서 작업할 수 있습니다. 이는 마치 클라우드 스토리지 서비스처럼, 파일을 어디서든 열람하고 수정할 수 있는 장점을 가집니다.
- 협업 기능: 코랩은 여러 사용자가 동시에 작업할 수 있는 협업 기능을 제공합니다. 이를 통해 팀원들과 함께 프로젝트를 진행하고, 실시간으로 코드를 공유하며 토론할 수 있습니다. 이는 마치 구글 독스와 같이, 여러 사람이 동시에 문서를 수정하고 토론하는 것과 비슷합니다.
- 스니펫과 템플릿 제공: 코랩은 다양한 코드 스니펫과 템플릿을 제공하여, 초보자도 쉽게 딥러닝 프로젝트를 시작할 수 있습니다. 이를 활용하면, 복잡한 코드를 처음부터 작성하지 않고도 빠르게 모델을 구현하고 학습할 수 있습니다. 이는 마치 레시피를 따라 요리하는 것과 같이, 미리 정해진 과정을 따라 결과물을 만들어낼 수 있습니다.
이처럼 코랩은 딥러닝을 수행하는 데 있어 고성능 컴퓨팅 자원, 접근성, 협업 기능, 코드 스니펫 등 다양한 장점을 제공합니다. 이러한 장점들은 딥러닝 프로젝트를 진행하는 데 있어 시간과 노력을 크게 절약할 수 있게 도와줍니다.
무엇보다도 코랩은 기본적으로 무료로 제공되며, GPU와 TPU를 무료로 사용할 수 있다는 점이 커다란 혜택이 아닐까 합니다. 이를 통해 개인이나 소규모 팀이 비용 부담 없이 딥러닝 프로젝트를 진행할 수 있습니다.
아래 세션에서는 코랩 딥러닝 기초 사용법에 대해 우선 머신러닝 라이브러리인 TensorFlow와 Keras를 사용하는 방법부터 차근차근 정리해보도록 하겠습니다.
TensorFlow와 Keras 설치 및 사용
코랩 딥러닝을 위해 TensorFlow와 Keras라는 라이브러리를 설치해야 합니다. 코랩은 기본적으로 TensorFlow를 설치되어 있지만, 최신 버전을 사용하려면 다음과 같이 직접 설치해야 합니다.
!pip install -q tensorflow
위와 같이 실행하면 TensorFlow를 불러와 사용할 수 있습니다.
import tensorflow as tf
# TensorFlow 버전 확인
print(tf.__version__)
Keras는 TensorFlow에 포함되어 있기 때문에 별도의 설치 없이 바로 사용할 수 있습니다.
from tensorflow import keras
# Keras 버전 확인
print(keras.__version__)
위와 같은 방법으로 기본 코랩 딥러닝 사용을 위한 라이브러리 설치 및 버전 확인이 완료되었습니다.
예제: MNIST 데이터셋으로 손글씨 숫자 분류하기
코랩 딥러닝 입문 예제로 자주 사용되는 MNIST 데이터셋을 활용하여 손글씨 숫자를 분류하는 모델을 만들어 보겠습니다.
우선 코랩 딥러닝 입문 예제인 MNIST 데이터셋이 무엇이고 손글씨 숫자 분류 문제가 무엇인지 정의하고 예시 코드를 알아보도록 하겠습니다.
MNIST 데이터셋이란? 또한 손글씨 숫자 분류 문제 정의
MNIST 데이터셋은 손글씨 숫자 분류를 위한 대표적인 데이터셋으로, Modified National Institute of Standards and Technology Database의 약자입니다. 이 데이터셋은 0부터 9까지의 손글씨 숫자 이미지로 구성되어 있으며, 머신러닝 및 딥러닝 분야에서 기본적인 이미지 분류 문제로 널리 사용됩니다.
MNIST 데이터셋은 다음과 같은 이유로 초기 예시로 많이 사용되는데, 그 목적은 다음과 같습니다.
- 간단한 구조: MNIST 데이터셋은 28×28 픽셀의 흑백 이미지로 이루어져 있어, 다루기가 상대적으로 쉽습니다. 이미지의 크기도 작아서 메모리와 컴퓨팅 자원에 부담이 적습니다. 이러한 간단한 구조는 초보자들이 이해하기 쉽게 해줍니다.
- 데이터셋의 균형: MNIST 데이터셋은 각 숫자 클래스가 균등하게 분포되어 있습니다. 이로 인해, 데이터 불균형 문제를 고려하지 않고도 모델의 성능을 평가할 수 있습니다.
- 범용성: 손글씨 숫자 인식은 일반적인 이미지 분류 문제로 여겨집니다. 따라서 MNIST를 통해 다양한 머신러닝 및 딥러닝 기법을 실험하고 이해할 수 있습니다.
- 벤치마크: MNIST는 이미지 분류 알고리즘의 성능을 비교하기 위한 표준 데이터셋으로 사용되어 왔습니다. 이를 통해 다양한 모델들의 성능을 쉽게 비교할 수 있으며, 새로운 기법의 효과를 검증할 수 있습니다.
따라서, MNIST 데이터셋은 손글씨 숫자 분류 문제를 통해 이미지 분류 기술의 기초를 익히고, 다양한 머신러닝 및 딥러닝 알고리즘을 적용해 볼 수 있는 좋은 예시입니다.
손글씨 숫자 분류 문제 예시 코드
코랩 딥러닝을 활용한 손글씨 숫자 분류 문제 예시 코드를 정리하면 아래와 같습니다.
1. 데이터 불러오기 및 전처리: 먼저 MNIST 데이터셋을 불러온 후, 픽셀 값을 0과 1 사이의 값으로 정규화합니다.
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
2. 모델 정의: 이제 신경망 모델을 정의합니다. 간단한 Sequential 모델을 사용하며, 입력층, 은닉층, 출력층을 정의합니다.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10, activation='softmax')
])
3. 모델 컴파일: 모델을 컴파일하려면 손실 함수, 옵티마이저, 평가 지표를 지정해야 합니다.
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
4. 모델 학습: 모델을 학습하기 위해 fit
함수를 사용하며, 에포크 수와 배치 크기를 지정합니다.
model.fit(x_train, y_train, epochs=5, batch_size=32)
5. 모델 평가: 학습된 모델을 평가하기 위해 evaluate
함수를 사용하여 테스트 데이터셋을 이용해 성능을 확인합니다.
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)
6. 모델 예측: 이제 학습된 모델을 사용하여 새로운 데이터에 대한 예측을 수행할 수 있습니다. predict
함수를 사용하여 테스트 데이터셋의 첫 번째 이미지에 대한 예측 결과를 출력해봅시다.
import numpy as np
predictions = model.predict(x_test)
print('Predicted label:', np.argmax(predictions[0]))
print('True label:', y_test[0])
이번 포스팅에서는 코랩 사용법 및 코랩 딥러닝에 대한 마지막 글로, 코랩에서 딥러닝을 수행할 때의 장점에 대해 알아보고 TensorFlow와 Keras 설치 및 사용법에 이어 MNIST 데이터셋을 활용한 손글씨 숫자 분류 코드를 실제 예시코드로 작성해보았습니다.
여기에 소개된 기본적인 코랩 사용법외에는 코랩의 FAQ 페이지가 참고가 되지 않을까 싶습니다.
앞선 포스팅에서 정리한 코딩/프로그래밍 관련 글은 아래와 같습니다.
파이썬 웹자동화 (3) 셀레니움 화면조작 : 입력, 클릭 및 선택 방법 (웹 자동로그인, 자동검색)
ChatGPT API 사용 방법 3분내 끝내기 (2) Text-Davinci-003 API Key 생성 및 파라미터 설정 방법