본문 바로가기
개발/AI

Python과 Tensorflow를 이용하여 구현한 LSTM 활용하기

by 꾀돌이 개발자 2024. 7. 13.

 

LSTM 활용하기

 

 

Python의 딥러닝 라이브러리인 Tensorflow를 사용하여 간단한 장단기 메모리(LSTM)을 활용하는 예제 코드입니다.

 

LSTM으로 학습하는 코드(아래 코드 Line1~Line43까지)에 대한 설명은 아래 주소를 참조하세요.

https://easyjwork.tistory.com/38

 

Python과 Tensorflow를 이용하여 LSTM 구현하기

LSTM 구현하기  Python의 딥러닝 라이브러리인 Tensorflow를 사용하여 간단한 장단기 메모리(LSTM)을 구현하는 예제 코드입니다. # 필요한 라이브러리 임포트import numpy as npimport matplotlib.pyplot as pltimport

easyjwork.tistory.com

 

# 필요한 라이브러리 임포트
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# 임의의 시계열 데이터 생성 (사인파)
def generate_sin_wave(seq_length, num_sequences):
    x = np.linspace(0, 100, seq_length * num_sequences)
    y = np.sin(x)
    return y.reshape(num_sequences, seq_length, 1)

seq_length = 50  # 시퀀스 길이
num_sequences = 1000  # 시퀀스 개수
data = generate_sin_wave(seq_length, num_sequences)

# 데이터셋 분리
split = int(0.8 * num_sequences)
train_data = data[:split]
test_data = data[split:]

# 모델 구축
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(seq_length, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

# 모델 학습
X_train = train_data[:, :-1]
y_train = train_data[:, -1]
model.fit(X_train, y_train, epochs=20, verbose=1)

# 예측
X_test = test_data[:, :-1]
y_test = test_data[:, -1]
predictions = model.predict(X_test)

# 결과 시각화
plt.plot(y_test, label='True')
plt.plot(predictions, label='Predicted')
plt.legend()
plt.show()

# 모델 저장
model.save('./mnist_model.h5')

# 저장된 모델 불러오기
loaded_model = tf.keras.models.load_model('./mnist_model.h5')

# 모델 아키텍처 확인
loaded_model.summary()

# 모델 컴파일 정보 확인
print("Optimizer:", loaded_model.optimizer)
print("Loss function:", loaded_model.loss)
print("Metrics:", loaded_model.metrics_names)

# 모델의 가중치 확인
weights = loaded_model.get_weights()
print("Model weights:", weights)

# 불러온 모델을 사용하여 예측
predictions = loaded_model.predict(x_test)

# 예측 결과 확인 (예: 첫 번째 테스트 이미지의 예측 결과)
print(predictions[0])  # softmax 출력
print(np.argmax(predictions[0]))  # 예측된 클래스

 

 

1. 모델 저장

- model.save('./mnist_model.h5'): 현재 학습된 모델을 HDF5 파일 포맷으로 저장합니다. 이 파일에는 다음 정보가 포함됩니다.

  • 모델의 아키텍처 (레이어 구조)
  • 모델의 가중치
  • 컴파일 정보 (optimizer, loss, metrics)
  • 모델의 학습 상태 (모든 epoch에 대한 학습 상태)

 

 

2. 저장된 모델 불러오기

- loaded_model = tf.keras.models.load_model('mnist_model.h5'): 저장된 모델 파일을 불러옵니다.

  • 이 함수는 모델 아키텍처, 가중치, 컴파일 정보 및 학습 상태를 모두 복원합니다.
  • loaded_model 변수에 복원된 모델이 할당됩니다.

 

 

3. 모델 아키텍처 확인

- loaded_model.summary(): 모델의 레이어와 각 레이어의 출력 형태, 파라미터 수 등을 출력합니다.

 

 

4. 모델 컴파일 정보 확인

- print(loaded_model.optimizer): Optimizer 정보 확인 (위 코드에서는 keras.optimizer_v2.adam.Adam를 의미함)

- print(loaded_model.loss): Loss 함수 정보 확인 (위 코드에서는 function mean_squared_error를 의미함)

- print(loaded_model.metrics_names): Metrics 정보 확인 (위 코드에서는 ['loss']를 의미함)

 

 

5. 모델의 가중치 확인

- weights = loaded_model.get_weights(): 모델의 학습 상태는 주로 모델의 가중치나 특정 레이어의 가중치, 편향을 확인하여 확인할 수 있습니다. 이를 위해 get_weights() 메서드를 사용합니다. (weights 변수는 길이 5의 리스트)

  • weights[0] = (1, 200) 크기의 가중치(weight) array
  • weights[1] = (50, 200) 크기의 가중치(weight) array
  • weights[2] = (200) 크기의  편향(bias) array
  • weights[3] = (50, 1) 크기의 가중치(weight) array
  • weights[4] = (1) 크기의 편향(bias) array

 

 

6. 불러온 모델을 사용하여 예측

- predictions = loaded_model.predict(x_test): 불러온 모델을 사용하여 x_test 데이터에 대한 예측을 수행합니다.

  • 이 반환 값은 softmax 활성화 함수를 사용한 출력값으로, 각 클래스에 대한 확률 분포를 나타냅니다.

 

 

7. 예측 결과 확인 (예: 첫 번째 테스트 이미지의 예측 결과)

- print(predictions[0]): 첫 번째 테스트 이미지에 대한 예측 결과를 의미합니다.

  • 이 결과는 10개의 확률값으로 이루어진 배열로, 각 확률값은 해당 클래스일 확률을 나타냅니다.

- print(np.argmax(predictions[0])): 이 확률값 중 가장 큰 값의 인덱스를 반환합니다.

  • 이 인덱스는 모델이 예측한 클래스(숫자 0-9 중 하나)를 나타냅니다.
  • 예를 들어, 첫 번째 테스트 이미지에 대한 예측 결과가 predictions[0]에서 가장 큰 값이 인덱스 7에 있다면, 모델은 이 이미지가 숫자 7을 나타낸다고 예측한 것입니다.