본문 바로가기
개발/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을 나타낸다고 예측한 것입니다.

 

반응형