LSTM 활용하기
Python의 딥러닝 라이브러리인 Tensorflow를 사용하여 간단한 장단기 메모리(LSTM)을 활용하는 예제 코드입니다.
LSTM으로 학습하는 코드(아래 코드 Line1~Line43까지)에 대한 설명은 아래 주소를 참조하세요.
https://easyjwork.tistory.com/38
# 필요한 라이브러리 임포트
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을 나타낸다고 예측한 것입니다.
'개발 > AI' 카테고리의 다른 글
[AI] 인공지능 모델 설계 자동화를 위한 NAS 간단한 예제 (0) | 2024.08.26 |
---|---|
[AI] 인공지능 모델 설계 자동화를 위한 NAS (0) | 2024.08.12 |
Python과 Tensorflow를 이용하여 LSTM 구현하기 (2) | 2024.07.13 |
Python과 Tensorflow를 이용하여 구현한 RNN 활용하기 (0) | 2024.07.10 |
Python과 Tensorflow를 이용하여 RNN 구현하기 (0) | 2024.07.10 |