안녕하세요!
오늘은 구글이 만든 대표적인 머신러닝 프레임워크인 TensorFlow에 대해 알아보고, 이를 활용해 이미지를 분류하는 인공지능 모델을 직접 만들어 보겠습니다.
1. TensorFlow 기초와 날씨 분류 모델 실습
1-1. 텐서플로우란?
텐서플로우는 데이터 흐름 그래프(Data Flow Graph)를 사용하여 수치 계산을 하는 라이브러리입니다.
- 노드(Node): 수학적 연산을 수행합니다.
- 엣지(Edge): 다차원 데이터 배열인 '텐서'를 전달합니다.
1-2. 텐서(Tensor)의 핵심 속성
텐서는 넘파이(NumPy) 배열과 비슷하지만, GPU 가속과 자동 미분이라는 강력한 차별점이 있습니다.
- Shape (모양): 데이터의 차원 (예: (Batch, Height, Width, Channel))
- Dtype (자료형): float32, int32 등 데이터의 타입
- Device: CPU에 있는지 GPU에 있는지 나타냄
1-3. 텐서 조작하기 (코드 핵심 요약)
① 즉시 실행 (Eager Execution)
TF 2.x에서는 파이썬처럼 코드를 실행하자마자 결과를 확인할 수 있습니다.
x = tf.constant([[1, 2], [3, 4]])
# 연산 결과가 바로 출력됨
② 형변환 및 차원 조작
딥러닝에서는 데이터의 형태를 바꾸는 일이 매우 잦습니다.
- tf.cast: 자료형 변경 (예: int -> float)
- tf.reshape: 모양 변경 (예: 1열로 나열된 데이터를 행렬로)
- tf.transpose: 축 교환 (예: 가로세로 뒤집기)
- tf.expand_dims / tf.squeeze: 차원 늘리기와 줄이기
1-4. 자동 미분 (GradientTape)
딥러닝의 학습 원리인 '역전파'를 가능하게 하는 기술입니다. tf.GradientTape() 블록 안의 연산을 기록하여 기울기를 계산합니다.
with tf.GradientTape() as tape:
# 연산 기록
y = tf.nn.sigmoid(x)
# 미분값 계산
dx = tape.gradient(y, x)

2. Tensor 실전 프로젝트: 날씨 이미지 분류
4가지 카테고리(Cloudy, Rain, Shine, Sunrise) 이미지를 분류하는 모델을 만들어 봅니다.
2-1. 데이터 전처리
이미지 데이터를 8:2 비율로 나누고, ImageDataGenerator를 사용하여 정규화(1/255) 및 수평 뒤집기 증강을 적용합니다.
Found 900 images belonging to 4 classes. (Training)
Found 225 images belonging to 4 classes. (Validation)
2-2. 모델 설계 비교
성능을 높이기 위해 세 가지 다른 구조의 모델을 실험해 봅니다.
| 모델 | 구조 특징 | 특징 |
| Model 1 | Input -> Flatten -> Dense(4) | 가장 단순한 선형 모델 |
| Model 2 | Dense(64, ReLU) 추가 | 은닉층을 통한 비선형성 추가 |
| Model 3 | 다층 은닉층 + Dropout | 과적합 방지를 위한 깊은 구조 |
2-3. 학습 결과 분석
각 모델별로 Epoch가 진행됨에 따라 정확도(Accuracy)가 어떻게 변하는지 확인합니다.

Model 1 Test accuracy: 45.20%
Model 2 Test accuracy: 58.75%
Model 3 Test accuracy: 62.10%
학습 포인트: 단순히 층을 깊게 쌓는 것(MLP)만으로는 이미지 분류 성능에 한계가 있습니다. 다음 시간에는 이미지의 공간 특징을 잡아내는 CNN(합성곱 신경망)을 배워보겠습니다!
마무리
오늘은 TensorFlow의 텐서 연산 기초부터 간단한 이미지 분류기 제작까지 완료했습니다. 딥러닝 학습 시 자료형 불일치(dtype error)나 차원 불일치(shape error)가 자주 발생하므로, tf.cast와 tf.reshape를 능숙하게 다루는 연습이 꼭 필요합니다.
'개념 정리 step2 > 멀티모달(Multi-modal)' 카테고리의 다른 글
| [NLP] 단어 임베딩: Word2Vec부터 FastText, GloVe (0) | 2026.01.14 |
|---|---|
| [NLP 기초] 자연어 처리의 시작: 토큰화와 벡터화 (0) | 2026.01.13 |
| [CV Archive] YOLOv8 Segmentation: 스타벅스 로고 추출하기 (0) | 2026.01.11 |
| [YOLO] 축구 영상 객체 탐지 프로젝트: Nano vs Small 모델 성능 비교 분석 (0) | 2026.01.10 |
| YOLOv8을 이용한 이안류 탐지 및 Segmentation 기초 (0) | 2026.01.08 |