from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# DNN 모델 생성
model_dnn = Sequential()
model_dnn.add(Dense(64, activation='relu', input_shape=(3,))) # 입력층
model_dnn.add(Dense(64, activation='relu')) # 은닉층
model_dnn.add(Dense(1)) # 출력층
# 모델 컴파일
model_dnn.compile(optimizer='adam', loss='mean_squared_error')
# 모델 학습
model_dnn.fit(X_train, y_train, epochs=10, batch_size=32)
Sequential
모델을 생성합니다. Sequential
모델은 층을 선형으로 연결하여 구성하는 가장 간단한 형태의 모델입니다.model_dnn.add(Dense(64, activation='relu', input_shape=(3,)))
코드는 입력층을 추가하는 부분입니다. 입력층에는 Dense
층을 사용하며, 활성화 함수로는 ReLU를 설정하였습니다. input_shape=(3,)
는 입력 데이터의 형태를 나타냅니다. 여기서는 (LoT, pH, Temp) 3개의 독립변수를 입력으로 받습니다.model_dnn.add(Dense(64, activation='relu'))
코드는 은닉층을 추가하는 부분입니다. 위 코드에서는 하나의 은닉층을 추가하였고, 은닉층의 뉴런 수는 64로 설정하였습니다.model_dnn.add(Dense(1))
코드는 출력층을 추가하는 부분입니다. 여기서는 종속변수인 Process를 예측하기 때문에 출력층에는 하나의 뉴런을 사용하였습니다.model_dnn.compile(optimizer='adam', loss='mean_squared_error')
코드는 모델을 컴파일하는 부분입니다.model_dnn.fit(X_train, y_train, epochs=10, batch_size=32)
코드는 모델을 학습하는 부분입니다. X_train
은 입력 데이터, y_train
은 실제값인 종속변수를 나타냅니다. epochs
는 전체 데이터셋을 몇 번 반복하여 학습할지를 나타내는 매개변수이고, batch_size는 한 번에 학습할 데이터 샘플의 개수를 나타내는 매개변수입니다.뉴런 수를 결정하는 것은 모델의 복잡성과 학습 능력 사이의 균형을 찾는 과정입니다. 일반적으로 뉴런 수는 모델의 용량(capacity)을 나타내며, 뉴런 수가 많을수록 모델은 더 복잡한 패턴을 학습할 수 있습니다.
64개의 뉴런을 사용한 것은 실험적인 선택이며, 데이터셋의 복잡성과 모델의 성능에 따라 조정될 수 있습니다. 뉴런 수를 적게 하면 모델이 간단해지고 과적합(overfitting) 위험이 줄어들 수 있지만, 데이터의 표현 능력이 제한될 수도 있습니다. 반대로, 뉴런 수를 많이 사용하면 모델이 더 복잡한 패턴을 학습할 수 있지만, 과적합의 위험이 커질 수 있습니다.
따라서 뉴런 수는 데이터셋의 특성과 모델의 성능을 고려하여 조정해야 합니다. 실험을 통해 최적의 뉴런 수를 찾아가는 것이 일반적인 접근법입니다.
relu는 Rectified Linear Unit의 약자로, 인공 신경망에서 가장 널리 사용되는 활성화 함수 중 하나입니다. relu 함수는 입력값이 0보다 작을 경우 0을 출력하고, 0보다 큰 경우에는 입력값을 그대로 출력합니다. 이 함수는 비선형성을 가지며, 신경망의 표현 능력을 향상시키는데 도움을 줍니다.
다른 종류의 활성화 함수로는 시그모이드(sigmoid), 하이퍼볼릭 탄젠트(tanh), 리키 렐루(leaky relu), 소프트맥스(softmax) 등이 있습니다. - 시그모이드 함수는 0과 1 사이의 값을 출력하여 이진 분류 문제에 주로 사용됩니다.
Sequential은 케라스(Keras) 모델의 일종으로, 순차적인 신경망 모델을 만들기 위해 사용됩니다. Sequential 모델은 여러 개의 레이어를 순차적으로 쌓아 구성할 수 있으며, 입력부터 출력까지 데이터가 한 방향으로 흐르는 구조입니다.
다른 모델 구조로는 함수형 API(functional API)와 서브클래싱 API(subclassing API) 등이 있습니다.
'epochs'는 딥러닝 모델에서 학습 데이터셋을 반복하여 훈련하는 횟수를 의미합니다. 한 번의 epoch는 전체 학습 데이터셋이 모델에 한 번 통과하는 것을 의미합니다.
각 epoch마다 모델은 입력 데이터에 대한 예측을 생성하고, 이 예측과 실제값 사이의 오차를 최소화하기 위해 가중치를 업데이트합니다. 이러한 반복적인 과정을 통해 모델은 학습 데이터에 대한 예측 성능을 향상시키며, 주어진 문제에 최적화된 가중치를 찾아냅니다.
epoch의 크기는 모델 학습에 사용되는 데이터의 양과 복잡성, 모델 구조 등에 따라 달라질 수 있습니다. 일반적으로 epoch를 늘릴수록 모델은 더 많은 훈련 데이터를 활용하여 학습하게 되며, 그만큼 성능 향상의 가능성이 있습니다. 그러나 epoch를 지나치게 늘리면 모델이 학습 데이터에 과도하게 적합될 수 있으며, 이는 테스트 데이터나 실제 환경에서의 예측 성능을 저하시킬 수 있습니다.
적절한 epoch 수는 모델과 데이터에 따라 다를 수 있으므로, 실험을 통해 최적의 epoch 값을 찾는 것이 중요합니다. 일반적으로 학습 과정을 모니터링하면서 검증 데이터에 대한 성능이 향상되다가 더 이상 개선되지 않는 시점을 확인하고, 그때의 epoch 수를 선택하는 것이 일반적인 접근 방식입니다.