RNN 구현하기
Python의 딥러닝 라이브러리인 Tensorflow를 사용하여 간단한 순환 신경망(RNN)을 구현하는 예제 코드입니다.
# 필요한 라이브러리 임포트
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
import matplotlib.pyplot as plt
# 데이터셋 로드 및 전처리
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 데이터 정규화
x_train = x_train / 255.0
x_test = x_test / 255.0
# 라벨을 원-핫 인코딩
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# RNN 모델 생성
model = Sequential()
model.add(SimpleRNN(128, input_shape=(28, 28)))
model.add(Dense(10, activation='softmax'))
# 모델 컴파일
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델 훈련
history = model.fit(x_train, y_train, batch_size=128, epochs=5, validation_split=0.2)
# 모델 평가
score = model.evaluate(x_test, y_test)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
# 결과 시각화
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
1. 필요한 라이브러리 임포트
- import tensorflow as tf: TensorFlow 라이브러리를 임포트합니다. (tensorflow version은 2.x)
- from tensorflow.keras.models import Sequential: Sequential 모델을 사용하기 위해 Keras의 models 모듈에서 Sequential 클래스를 임포트합니다.
- from tensorflow.keras.layers import SimpleRNN, Dense: RNN 층과 Dense 층을 사용하기 위해 Keras의 layers 모듈에서 SimpleRNN과 Dense 클래스를 임포트합니다.
- from tensorflow.keras.datasets import mnist: MNIST 데이터셋을 로드하기 위해 Keras의 datasets 모듈에서 mnist를 임포트합니다.
- from tensorflow.keras.utils import to_categorical: 라벨을 원-핫 인코딩하기 위해 Keras의 utils 모듈에서 to_categorical 함수를 임포트합니다.
- import matplotlib.pyplot as plt: 훈련 결과를 시각화하기 위해 matplotlib의 pyplot 모듈을 임포트합니다.
2. 데이터셋 로드 및 전처리
- (x_train, y_train), (x_test, y_test) = mnist.load_data(): MNIST 데이터셋을 로드하고, 훈련 데이터와 테스트 데이터를 변수에 저장합니다.
3. 데이터 정규화
- x_train = x_train / 255.0: 이미지 데이터를 0에서 1 사이의 값으로 정규화합니다.
- x_test = x_test / 255.0: 이미지 데이터를 0에서 1 사이의 값으로 정규화합니다.
4. 라벨을 원-핫 인코딩
- y_train = to_categorical(y_train): 라벨 데이터를 원-핫 인코딩하여 다중 클래스 분류에 사용할 수 있도록 변환합니다.
- y_test = to_categorical(y_test): 라벨 데이터를 원-핫 인코딩하여 다중 클래스 분류에 사용할 수 있도록 변환합니다.
5. RNN 모델 생성
- model = Sequential(): Sequential 모델 객체를 생성합니다.
- model.add(SimpleRNN(128, input_shape=(28, 28))): 128개의 유닛을 가진 SimpleRNN 층을 모델에 추가하고, 입력 데이터의 형태를 (28, 28)로 설정합니다.
- model.add(Dense(10, activation='softmax')): 10개의 출력 유닛을 가진 Dense 층을 모델에 추가하고, 소프트맥스 활성화 함수를 사용하여 각 클래스에 대한 확률을 출력하도록 설정합니다.
* 아래는 생성된 RNN 모델의 행렬 연산 과정을 나타내며, [a, b]는 행렬의 행과 열의 크기를 의미합니다.
6. 모델 컴파일
- model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']): 모델을 컴파일합니다.
- 손실 함수로 categorical_crossentropy를 사용합니다.
- 최적화 함수로 Adam 옵티마이저를 사용합니다.
- 평가 지표로 정확도를 설정합니다.
7. 모델 훈련
- history = model.fit(x_train, y_train, batch_size=128, epochs=5, validation_split=0.2): 모델을 훈련합니다.
- 배치 크기는 128,
- 에포크 수는 5으로 설정하고,
- 학습 데이터의 20%를 검증 데이터로 사용합니다.
- 학습 과정의 기록은 history 객체에 저장됩니다.
8. 모델 평가
- score = model.evaluate(x_test, y_test): 테스트 데이터를 사용하여 모델을 평가합니다. 평가 결과를 score 변수에 저장하고, 테스트 손실과 정확도를 출력합니다.
- print('Test loss:', score[0]): 테스트 손실을 출력합니다.
- print('Test accuracy:', score[1]): 테스트 정확도를 출력합니다.
9. 결과 시각화
- plt.plot(history.history['accuracy'], label='accuracy'): 훈련 정확도 값을 플롯합니다.
- plt.plot(history.history['val_accuracy'], label='val_accuracy'): 검증 정확도 값을 플롯합니다.
- plt.xlabel('Epoch'): x축 레이블을 'Epoch'으로 설정합니다.
- plt.ylabel('Accuracy'): y축 레이블을 'Accuracy'로 설정합니다.
- plt.legend(): 그래프에 범례를 추가합니다.
- plt.show(): 그래프를 화면에 출력합니다.
'개발 > AI' 카테고리의 다른 글
Python과 Tensorflow를 이용하여 LSTM 구현하기 (2) | 2024.07.13 |
---|---|
Python과 Tensorflow를 이용하여 구현한 RNN 활용하기 (0) | 2024.07.10 |
Python과 Tensorflow를 이용하여 구현한 CNN 활용하기 (0) | 2024.07.10 |
Python과 Tensorflow를 이용하여 CNN 구현하기 (0) | 2024.07.10 |
Python과 Tensorflow를 이용하여 구현한 DNN 활용하기 (0) | 2024.07.10 |