
아무것도 모르는 상태에서 이미지 인식 AI 만들기 ② | TensorFlow/Keras 기초편 - 머신러닝의 내부를 알자
요약
TensorFlow와 Keras를 사용하여 이미지 인식 AI를 구축하는 기초 과정을 설명합니다. 모델 구성부터 학습까지의 4단계 흐름과 레이어(Layer)의 개념을 다룹니다.
핵심 포인트
- TensorFlow와 Keras의 역할 및 차이점 이해
- 딥러닝 모델을 구성하는 4가지 핵심 레이어 개념 학습
- Sequential 모델 생성 및 Compile을 통한 학습 규칙 설정 방법
- Google Colab 환경에서의 GPU 설정 및 실습 가이드
아무것도 모르는 상태에서 이미지 인식 AI를 만드는 연재의 제2회입니다. 지난 회차에서는 AI의 입력이 되는 이미지 데이터의 정체가 "NumPy의 숫자 덩어리"라는 것을 배웠습니다. 이번에는 그 데이터를 사용하여 AI 모델을 구성하고 학습시키기까지의 흐름을 해설합니다.
"TensorFlow나 Keras 같은 이름이 여러 개 있어서 복잡하다", "AI 코드의 전체상을 파악할 수 없다"라고 느끼는 분들도 이해할 수 있도록, AI 구축의 4가지 단계를 순서대로 설명하겠습니다.
-
TensorFlow와 Keras란
-
딥러닝 (Deep Learning)의 "블록 (레이어 (Layer))"들에 대해 알아보자
-
【실전】 세상에서 가장 심플한 AI를 구성하여 특훈시켜 보기
-
Google Colaboratory (런타임: 무료 버전 T4 GPU)
-
Python 3.12.13
코드를 작성하기 전에 Google Colab 설정을 진행합니다. AI 학습에는 방대한 곱셈과 나눗셈이 필요하므로 런타임을 GPU로 전환해 주세요.
[설정 절차]
Colab 상단 메뉴에서 "런타임" > "런타임 유형 변경" > "T4 GPU"를 선택하고 저장합니다.
Google이 개발한 오픈 소스 머신러닝 (Machine Learning) 프레임워크. 뉴럴 네트워크 (Neural Network)의 구축·학습·실행을 수행하기 위한 기반이 되는 라이브러리로, 세밀한 처리까지 유연하게 제어할 수 있습니다.
TensorFlow의 공식 고수준 API로, 현재는 tf.keras로서 TensorFlow에 통합되어 있습니다. 복잡한 처리를 심플한 코드로 작성할 수 있도록 설계되어 있으며, 모델 구축을 직관적으로 수행할 수 있는 것이 특징입니다.
이번에는 심플한 AI를 구축하기 위해, 커스텀성이 높은 TensorFlow 대신 Keras를 사용합니다.
AI의 뇌는 목적(이미지, 문장, 음성 등)에 맞춰 다양한 형태를 가진 "블록 (전문 용어로 레이어 (Layer)라고 부릅니다)"을 쌓아서 만듭니다. 향후 이미지 인식 (CNN)에서도 반드시 등장하는 대표적인 4가지 블록을 소개합니다.
이미지에서 "특징"을 찾아내는 블록. 이미지에 필터를 적용하여 세로선, 가로선, 윤곽선 등의 "특징"을 부각시키는 센서와 같은 블록입니다.
찾아낸 특징을 꽉 압축하는 블록. 이미지를 일부러 큼직하게 작게 만듦으로써, 위치의 어긋남이나 미세한 차이에 강한 AI가 됩니다.
형태를 정돈하여 "최종 판정"으로 연결하는 블록. 입체적인 이미지 데이터를 한 줄의 긴 숫자 나열 (1차원)로 변형하는 블록입니다. 마지막 판정 블록으로 연결하기 위한 전처리입니다.
AI의 가장 기본적인 신경 세포 (뉴런 (Neuron)) 덩어리. 전달된 숫자를 복잡하게 조합하여, "이것은 95%의 확률로 '개구리'다!"라고 최종적인 예측·판정을 내립니다.
그럼 실제로 Keras를 사용하여 심플한 AI를 만들고 학습시켜 봅시다. 이번에는 "1개의 숫자 (X)를 입력하면, 그것을 2배로 만들고 1을 더한 숫자 (Y = 2X + 1)"를 스스로 예측하는 AI를 만듭니다. AI 구축 흐름은 다음 4가지 단계로 이루어집니다.
- Sequential()로 AI의 형태 (상자) 만들기
먼저 Sequential (순차적으로 쌓아 올리기)이라는 그릇을 준비하고, 가장 기본적인 블록인 Dense를 하나만 넣습니다.
import tensorflow as tf
import numpy as np
# 가장 심플한 AI의 형태를 정의
...
- compile()로 공부 규칙 정하기
형태가 만들어졌다면, 다음은 "이 AI에게 어떤 규칙으로 공부시킬 것인가"를 설정 (컴파일 (Compile))합니다. 여기에서는 "교사"와 "틀림의 지표"를 세팅합니다.
my_first_ai.compile(
optimizer="sgd", # 가정교사: 뇌 (가중치 (Weight))를 조금씩 수정해 나가는 설정
loss="mean_squared_error", # 틀림의 지표: AI의 해답이 정답과 얼마나 차이가 나는지를 측정하는 지표
...
- .fit()으로 데이터를 흘려 넣어 특훈시키기
데이터 (텐서 (Tensor))를 AI 안으로 흘려 보냅니다. 이번에는 연습 문제 (X)와 정답 (Y)를 전달하여 "500회 (epochs=500)"의 특훈을 부여합니다. 나아가 Matplotlib를 사용하여 AI가 얼마나 똑똑해졌는지 (틀림의 크기인 Loss의 감소)를 그래프로 나타내 봅시다.
import matplotlib.pyplot as plt
# 연습 문제 (X)와 그 정답 (Y)를 준비 (규칙은 Y = 2X + 1)
X = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
...
print("500회의 혹독한 특훈이 완료되었습니다! AI가 규칙을 학습했습니다.")
- 출력 발췌:
Epoch 1/500
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 43ms/step - loss: 1.0164e-05
Epoch 2/500
...
실행하면 처음에는 컸던 loss(손실) 수치가 횟수가 반복될수록 점점 작아지는 모습을 실시간으로 확인할 수 있습니다. 그래프에서도 Loss가 깔끔하게 우하향하며 0을 향해 가는 것을 알 수 있습니다!
- .predict()로 미지의 문제 예측하기
학습이 끝난 AI에게 가르쳐주지 않은 새로운 문제를 내어봅시다. "x가 10.0일 때, y는 무엇이 될까?"라고 질문(predict)합니다 (정답은 10 × 2 + 1 = 21이 되어야 합니다).
# predict = "예측하다"라는 명령
result = my_first_ai.predict(np.array([[10.0]]))
print("AI의 예측 결과:", result)
출력 결과: AI의 예측 결과: [[21.000055]]
AI는 수식(Y = 2X + 1)을 인간으로부터 배운 것이 아니라, 500회의 특훈 과정에서 데이터만을 보고 스스로 이 법칙을 학습하여 거의 "21"이라는 정답을 도출해냈습니다!
"AI의 예측 결과:" 출력
※ 출력이 "21"과 딱 떨어지지 않고 "21.000021"과 같이 나오는 이유는, AI가 학습을 통해 가중치(weight)를 조정할 때 완전히 일치하는 값을 내놓는 것이 어렵기 때문입니다. 이는 "학습 오차 (learning error)"라고 불리며, 실제 AI에서는 아주 미세한 차이가 발생하는 것이 일반적입니다.
이번 과정을 정리하면 다음과 같은 4단계가 됩니다.
Sequential()로 레이어(layer)를 쌓아 모델의 구조를 정의한다compile()로 학습 규칙(최적화 함수, 손실 함수)을 설정한다.fit()으로 데이터를 사용하여 모델을 학습시킨다.predict()로 미지의 데이터에 대해 예측을 수행한다
이미지 인식 AI (CNN)가 되더라도 기본적인 단계는 모두 이번과 동일합니다.
다음 회차(제3회)에서는 드디어 이번에 배운 Conv2D, MaxPooling2D, Flatten, Dense를 조합하여 컬러 이미지를 분류하는 이미지 인식 AI (CNN)를 구현합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기