1️⃣ 기본 라이브러리 설치 및 불러오기
먼저, TensorFlow와 필요한 라이브러리를 불러와.
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
import os
2️⃣ 간단한 데이터셋 생성
여기서는 랜덤 데이터를 만들어 훈련할 거야.
# 간단한 데이터 생성 (입력값 x, 출력값 y)
x_train = np.linspace(-1, 1, 100)
y_train = 3 * x_train + np.random.randn(*x_train.shape) * 0.3 # y = 3x + noise
✅ 설명
- np.linspace(-1, 1, 100): -1에서 1까지 100개의 데이터를 만듦.
- y = 3x + noise: 단순한 선형 관계를 가진 데이터
3️⃣ 모델 설계 (딥러닝 네트워크 구성)
이제 아주 간단한 신경망 모델을 만들어 보자.
model = keras.Sequential([
keras.layers.Dense(64, activation='relu', input_shape=(1,)), # 첫 번째 은닉층
keras.layers.Dropout(0.2), # 20%의 뉴런을 랜덤하게 끔 (과적합 방지)
keras.layers.Dense(32, activation='relu'), # 두 번째 은닉층
keras.layers.Dense(1) # 출력층 (회귀 문제이므로 활성화 함수 X)
])
✅ 설명
- keras.Sequential([]): 신경망 모델을 정의.
- Dense(64, activation='relu'): 뉴런 64개, 활성화 함수 ReLU 사용.
- Dropout(0.2): 20%의 뉴런을 랜덤하게 꺼서 과적합 방지.
- Dense(1): 최종 출력층 (1개의 숫자를 예측).
4️⃣ 모델 컴파일
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
✅ 설명
- optimizer='adam': Adam 최적화 알고리즘 사용.
- loss='mse': 평균 제곱 오차 (MSE) 손실 함수 사용.
- metrics=['mae']: 학습 과정에서 **MAE(평균 절대 오차)**를 모니터링.
5️⃣ 체크포인트 설정 (모델 저장)
훈련 중 가장 좋은 모델을 저장할 수 있어.
checkpoint_path = "training_checkpoints/cp.ckpt" checkpoint_dir = os.path.dirname(checkpoint_path) # 체크포인트 콜백 설정 checkpoint_callback = keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, verbose=1)
✅ 설명
- save_weights_only=True: 모델의 가중치만 저장 (전체 모델 저장 X).
- verbose=1: 저장될 때마다 로그를 출력.
6️⃣ 모델 훈련
history = model.fit(x_train, y_train, epochs=100, batch_size=10, callbacks=[checkpoint_callback], verbose=1)
✅ 설명
- epochs=100: 전체 데이터셋을 100번 반복 학습.
- batch_size=10: 한 번에 10개의 데이터를 학습.
- callbacks=[checkpoint_callback]: 학습 중 체크포인트 저장
7️⃣ 모델 평가
loss, mae = model.evaluate(x_train, y_train) print(f"평균 제곱 오차: {loss:.4f}, 평균 절대 오차: {mae:.4f}")
✅ 설명
- evaluate(): 학습이 끝난 후 모델이 얼마나 잘 예측하는지 확인.
- MSE: 낮을수록 좋음.
8️⃣ 모델 저장 및 불러오기
훈련한 모델을 저장하고 다시 불러올 수 있어.
(1) 모델 전체 저장 (구조+가중치+옵티마이저 포함)
model.save("saved_model/my_model")
(2) 저장한 모델 불러오기
new_model = keras.models.load_model("saved_model/my_model")
✅ 설명
- save()는 전체 모델을 저장.
- load_model()을 사용하면 불러올 수 있음.
9️⃣ 가중치 저장 및 불러오기
전체 모델이 아니라 가중치만 저장할 수도 있어.
(1) 가중치 저장
model.save_weights("weights/my_weights.h5")
(2) 가중치 불러오기
new_model.load_weights("weights/my_weights.h5")
✅ 설명
- save_weights()는 모델의 가중치만 저장.
- load_weights()로 불러올 수 있음.
🔟 모델 예측하기
이제 학습한 모델을 사용해 예측해보자.
x_test = np.array([-0.5, 0, 0.5, 1]) y_pred = model.predict(x_test) print("입력값:", x_test) print("예측값:", y_pred.flatten())
✅ 설명
- model.predict()를 사용해 새로운 데이터를 예측
💡 전체 코드 정리
import tensorflow as tf
from tensorflow import keras
import numpy as np
import os
# 데이터 생성
x_train = np.linspace(-1, 1, 100)
y_train = 3 * x_train + np.random.randn(*x_train.shape) * 0.3 # 노이즈 추가
# 모델 설계
model = keras.Sequential([
keras.layers.Dense(64, activation='relu', input_shape=(1,)),
keras.layers.Dropout(0.2),
keras.layers.Dense(32, activation='relu'),
keras.layers.Dense(1)
])
# 모델 컴파일
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
# 체크포인트 설정
checkpoint_path = "training_checkpoints/cp.ckpt"
checkpoint_callback = keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, verbose=1)
# 모델 훈련
model.fit(x_train, y_train, epochs=100, batch_size=10, callbacks=[checkpoint_callback], verbose=1)
# 모델 평가
loss, mae = model.evaluate(x_train, y_train)
print(f"평균 제곱 오차: {loss:.4f}, 평균 절대 오차: {mae:.4f}")
# 모델 저장
model.save("saved_model/my_model")
# 예측
x_test = np.array([-0.5, 0, 0.5, 1])
y_pred = model.predict(x_test)
print("입력값:", x_test)
print("예측값:", y_pred.flatten())
🚀 결론
이 코드에서는:
- 간단한 데이터셋을 생성
- 신경망 모델을 설계하고 드롭아웃을 추가
- 모델을 학습하고 체크포인트를 저장
- 모델을 저장하고 불러오는 방법을 학습
- 예측을 수행하여 결과 확인
'IT' 카테고리의 다른 글
세상에서 가장 쉬운 Transformer 설명 (초보자용) (1) | 2025.02.23 |
---|---|
유튜브 파일 저장 방법 및 블로그 작성 가이드 (0) | 2025.02.23 |
BMI와 체지방률 계산기로 나의 건강 상태 체크하기 (0) | 2025.02.23 |
연봉 실수령액 계산기 | 세금/4대보험 자동계산 (0) | 2025.02.23 |
인공지능(AI) 기반 식품위생 행정 업무 혁신 방안: 과장급 공무원을 위한 제안 (1) | 2025.02.23 |