말랑말랑제리스타일

[딥러닝 입문] TensorFlow로 딥 러닝 시작하기 본문

프로그래밍/딥러닝

[딥러닝 입문] TensorFlow로 딥 러닝 시작하기

제리제리 2024. 1. 19. 12:00

지난 글에서 딥 러닝과 머신 러닝 용어를 알아봤는데요. 이번에는 본격적으로 파이썬과 TensorFlow를 이용해 딥 러닝을 시작해 보는 방법을 알아봅시다.

파이썬과 TensorFlow 설치

파이썬은 딥 러닝을 학습하기에 필수라고 할 정도이기에 파이썬과 아나콘다는 이미 설치가 되어있다고 가정하겠습니다.

그리고 TensorFlow 설치를 위해서는 터미널에 아래 명령어를 입력해 줍니다.

pip install --upgrade tensorflow

이렇게 입력하면 pip를 이용해 TensorFlow가 설치되기 시작합니다.

설치가 완료되었다면 제대로 TensorFlow가 설치되었는지 확인하기 위해 버전을 출력해 보면 되겠죠.

하단의 파이썬 코드를 사용해서 Tensor Flow 설치가 완료되었는지 확인해 봅시다.

import tensorflow as tf
print(tf.__version__)

 

저 같은 경우는 2.15.0 버전의 TensorFlow가 설치되었네요.

간단히 TensorFlow를 이용해 딥 러닝 모델 만들기

다음으로 MNIST 데이터셋을 이용해 TensorFlow 기본 예제를 통해 딥 러닝 모델을 정의하고 학습시켜 봅시다.

MNIST 데이터셋이란

여기서 MNIST 데이터셋이 뭔지 모르는 분들을 위해 간단히 설명을 드리면 손으로 쓴 숫자들의 데이터셋으로 60,000개의 훈련 이미지와 10,000개의 테스트 이미지로 구성된 데이터셋입니다.

각 이미지는 28 * 28 픽셀 크기로 되어있으며, 각 픽셀은 0부터 255까지의 흑백 색상 값을 갖고 잇습니다.

가장 기본적인 머신 러닝 데이터셋 중 하나로 분류 알고리즘 테스트나 벤치마킹할 때 많이 쓰인다고 하네요.

 

딥 러닝 모델 만들고 테스트하기

먼저 TensorFlow를 이용한 딥 러닝 모델 생성에 필요한 라이브러리를 가져옵시다.

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D

TensorFlow를 비롯해 TensorFlow의 케라스 데이터셋에서 mnist 데이터셋을 가져오고 Sequentil 모델을 불러옵니다.

그리고 추가로 이것저것 필요한 라이브러리를 당겨오네요.

 

다음으로 mnist 데이터셋에서 데이터를 불러와야겠죠.

(x_train, y_train), (x_test, y_test) = mnist.load_data()

이렇게 mnist 데이터셋에서 데이터를 가져와 튜플 형태로 저장하는데요.

여기서 각 변수에 대해 잠깐 알아봅시다.

x_train : 훈련 이미지

x_test : 테스트할 이미지

y_train : 훈련 레이블

y_test : 테스트할 레이블

이렇게 load data 함수를 이용해서 훈련할 데이터와 테스트 데이터를 가져오는 겁니다.

 

이제 데이터를 전처리합니다.

데이터 전처리란 원시 데이터를 분석해서 모델링에 적합한 형태로 변환하는 과정을 말합니다.

데이터 품질을 향상하고 오류를 줄여 모델 성능을 향상하기 위한 단계라는 거죠.

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)

먼저 Reshape는 2D 텐서인 MNIST 데이터셋을 3D 텐서 형태로 변환해 주는 작업을 합니다.

다음으로 3번째 줄부터 6번째 줄까지에서 정규화를 해줍니다.

즉, 0~255 사이에 있는 픽셀 갑들을 0~1 사이의 값으로 정규화를 해주는 거죠.

마지막으로 레이블 인코딩입니다.

MNIST 데이터셋에서 각 레이블은 0~9 사이의 정수 값을 가지는데요.

이를 범주형 데이터로 인코딩하는 단계라고 하네요.

 

이제 모델을 정의해 봅시다.

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

모델은 앞서 라이브러리로 당겨온 Sequential 모델을 사용합니다.

케라스에서 제공하는 가장 간단한 딥 러닝 모델이죠.

먼저 32개의 필터를 가진 Convolutional Layer를 추가해 줍니다.

각 필터는 3 * 3 사이즈이며, ReLU라는 활성화 함수를 사용합니다.

그리고 이 레이어는 모델의 첫 번째 레이어이기 때문에 input_shape를 추가로 입력해줘야 한다고 하네요.

다음으로 64개의 필터를 가진 3*3의 동일한 레이어를 하나 더 추가해 줍니다.

이어서 MaxPooling2D라는 Pooling 레이어를 추가하는데 모델의 복잡성을 줄이고 과적합을 방지하는 데 도움이 된다고 하네요.

이어지는 Dropout 레이어는 25%의 뉴런을 꺼주는 과적합 방지 레이어라고 합니다.

Flatten 레이어는 2D 텐서를 1D 텐서로 변환하는 레이어인데 앞서 말한 Convolutional 레이어와 뒤에 추가할 Dense 레이어 사이에 필요한 레이어라고 합니다.

Dense 레이어는 모델 출력을 위한 레이어로 각 뉴런은 특정 클래스에 대한 예측 확률을 나타낸다고 하네요.

근본 없이 딥 러닝 공부를 시작하다 보니 상당히 어려운 용어들이 많이 나오는데 다음에 자세히 알아봐야겠네요.

 

이번에는 딥 러닝 모델 컴파일입니다.

모델이 학습하기 위해 필요한 설정들을 정의하는 과정이죠.

model.compile(loss=tf.keras.losses.categorical_crossentropy,
              optimizer=tf.keras.optimizers.Adadelta(),
              metrics=['accuracy'])

이 설정에 손실 함수, 옵티마이저, 평가 지표를 포함시킨다고 하는데요.

손실 함수는 모델의 예측과 실제 값 사이의 차이를 측정하는 함수입니다.

옵티마이저는 손실 함수의 결과를 바탕으로 모델의 가중치를 어떤 방식으로 업데이트할지 결정하는 거죠. 여기서는 Adadelta 옵티마이저가 사용되네요.

마지막으로 평가지표는 학습 도중 모델의 성능을 평가하는 데 사용되는 지표로 여기서는 정확도를 지표로 보고 있네요.

 

딥 러닝 모델 학습

model.fit(x_train, y_train,
          batch_size=128,
          epochs=10,
          verbose=1,
          validation_data=(x_test, y_test))

이제 본격적으로 생성한 모델을 트레이닝 데이터를 이용해 학습시켜 봅시다.

fit이라는 함수를 사용하고 배치 사이즈 등이 파라미터로 들어가네요.

 

딥 러닝 모델 평가

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

마지막으로 딥 러닝 학습된 모델을 평가하는 단계입니다.

테스트용 데이터를 이용해서 평가하게 되고 손실률과 정확도를 체크하게 됩니다.

 

출력 결과로 손실률 0.9, 정확도 0.8을 보이는 모델이 탄생했네요.

 

결론

뭐 마땅한 타이틀이 생각이 안 나서 결론이라고 적어봤습니다.

파이썬에서 TensorFlow를 설치하고 데이터 전처리, 모델 정의, 모델 컴파일 및 학습, 모델 평가 단계를 거치는 소스를 통해 딥 러닝을 한번 해봤는데요.

따로 용어 공부라던지 이론적인 공부를 하지 않고 단순히 TensorFlow 실습을 통해 딥 러닝을 공부하려고 하니 용어나 여러 가지 부분에서 너무 막히네요.

일단 더 나가는 건 중단하고 여기에 나온 용어나 각 과정을 좀 더 면밀히 공부해봐야 할 것 같습니다.

Comments