본문 바로가기

IT

TensorFlow 간단코드 소개

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())

 

🚀 결론

이 코드에서는:

  1. 간단한 데이터셋을 생성
  2. 신경망 모델을 설계하고 드롭아웃을 추가
  3. 모델을 학습하고 체크포인트를 저장
  4. 모델을 저장하고 불러오는 방법을 학습
  5. 예측을 수행하여 결과 확인