from tensorflow import keras # TensorFlow 라이브러리에서 Keras 모듈을 불러옵니다.
import data_reader # data_reader 파일에서 데이터 읽기 함수를 불러옵니다.
EPOCHS = 20 # 모델을 몇 번 학습시킬 것인지 정하는 에포크 수입니다. 기본값은 20입니다.
# 데이터를 읽어옵니다. data_reader 파일의 DataReader 클래스를 사용해 훈련/테스트 데이터를 로드합니다.
dr = data_reader.DataReader()
# 인공신경망 모델을 제작합니다. 28x28 입력 크기, 두 개의 Dense 레이어를 가지고 있습니다.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)), # 입력 레이어, 28x28 데이터를 1차원으로 평탄화합니다.
keras.layers.Dense(128, activation='relu'), # 첫 번째 은닉 레이어, 128개의 뉴런과 ReLU 활성화 함수를 사용합니다.
keras.layers.Dense(10, activation='softmax') # 출력 레이어, 10개의 뉴런과 Softmax 활성화 함수를 사용합니다.
])
1. 에포크 : 에포크는 전체 훈련 데이터셋에 대해 한 번 학습하는 과정을 의미합니다. 예를 들어, 에포크가 20이라면, 전체 훈련 데이터를 20번 반복해서 모델을 학습시킵니다. 더 많은 에포크는 모델이 데이터에서 더 복잡한 패턴을 학습할 수 있게 해 주지만, 너무 많은 에포크는 과적합(overfitting) 문제를 일으킬 수 있습니다.
2. Keras : 오픈 소스 신경망 라이브러리로, 인공 신경망 모델을 쉽고 빠르게 개발할 수 있도록 도와줍니다. 텐서플로우와 같은 저수준 라이브러리 위에서 동작하며, 코드를 단순화하고 가독성을 높여줍니다. 복잡한 딥러닝 모델도 상대적으로 적은 코드로 구현할 수 있게 해줍니다.
# 인공신경망을 컴파일합니다. 손실 함수와 최적화 알고리즘, 평가 메트릭을 지정합니다.
model.compile(optimizer='adam', metrics=['accuracy'],
loss='sparse_categorical_crossentropy')
# 인공신경망을 학습시킵니다. 훈련 데이터와 검증 데이터를 사용하며, 조기 중단 기능도 포함합니다.
print("\n\n************ TRAINING START ************ ")
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
validation_data=(dr.test_X, dr.test_Y),
callbacks=[early_stop])
# 학습 결과를 그래프로 출력합니다. data_reader 파일의 draw_graph 함수를 사용해 결과를 시각화합니다.
data_reader.draw_graph(history)