본문 바로가기
AI/Deep-Learning

[Keras] Sequential 모델과 Dense, Dropout

by Wikinist 2023. 9. 21.

TensorFlow의 Sequential 클래스는 신경망 모델을 만들기 위한 고수준 API 중 하나로, 순차적으로 레이어를 쌓아 간단한 신경망 모델을 구축하는 데 사용됩니다. 이 클래스는 특히 간단한 feedforward 신경망을 만들 때 유용합니다. Sequential 모델은 순서대로 레이어를 추가하면, 입력 데이터가 첫 번째 레이어에서 시작하여 순차적으로 각 레이어를 통과하게 됩니다.

주요 단계

Sequential 클래스를 사용하여 신경망 모델을 만드는 주요 단계는 다음과 같습니다:

Sequential 모델 생성

from tensorflow.keras.models import Sequential

model = Sequential()

레이어 추가

model.add() 메서드를 사용하여 순차적으로 레이어를 모델에 추가합니다. 예를 들어, 다음은 Dense 레이어를 추가하는 예제입니다.

from tensorflow.keras.layers import Dense

model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dropout(0.05))
model.add(Dense(units=10, activation='softmax'))

이렇게 레이어를 추가하면 입력 레이어, 은닉 레이어, 출력 레이어 등을 순차적으로 쌓을 수 있습니다.

모델 컴파일

모델을 사용하기 전에 컴파일해야 합니다. 컴파일 단계에서는 손실 함수, 옵티마이저(최적화 알고리즘), 평가 지표 등을 지정합니다.

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

모델 학습

model.fit() 메서드를 사용하여 데이터를 사용하여 모델을 학습시킵니다.

model.fit(X_train, y_train, epochs=10, batch_size=32)

모델 평가 및 예측

model.evaluate()를 사용하여 모델을 평가하거나, model.predict()를 사용하여 새로운 데이터에 대한 예측을 수행합니다.

loss, accuracy = model.evaluate(X_test, y_test)
predictions = model.predict(new_data)

Sequential 클래스는 간단한 신경망 구축을 위한 편리한 방법을 제공하며, 많은 종류의 레이어와 설정 옵션을 지원합니다. 그러나 복잡한 모델을 만들거나 다양한 입력 및 출력 스트림을 처리해야 할 때는 Functional API나 Subclassing API를 고려해야 할 수도 있습니다.

Dense 레이어

Dense 레이어는 딥 뉴럴 네트워크 모델에서 주로 사용되는 가장 기본적인 레이어 중 하나로, 밀집 연결 층(Dense Layer)이라고도 합니다. 이 레이어는 모든 입력 뉴런과 출력 뉴런이 서로 연결되어 있는 fully connected layer로 동작합니다. Dense 레이어는 주로 인공 신경망의 숨겨진(hidden) 레이어나 출력 레이어로 사용되며, 입력 데이터의 특징을 학습하고 출력을 생성하는 역할을 합니다.

주요 매개변수

Dense 레이어의 주요 매개변수는 다음과 같습니다:

units: 레이어에서 출력 뉴런의 수를 지정합니다. 이 값이 레이어의 출력 차원을 결정합니다.

activation: 레이어의 활성화 함수를 지정합니다. 활성화 함수는 뉴런의 출력을 조절하는 함수로, 주로 비선형성을 추가하거나 모델의 표현 능력을 향상시키는 데 사용됩니다. 예를 들어, 'relu' (Rectified Linear Activation) 또는 'sigmoid'와 'softmax' 등이 사용됩니다.

input_dim: 첫 번째 레이어로 추가되는 경우에만 필요한 매개변수로, 입력 데이터의 특성 수를 지정합니다. 이 매개변수를 설정하면 모델의 첫 번째 레이어로 인식하고 자동으로 입력 뉴런 수를 설정합니다.

Dense 레이어는 각 입력 뉴런과 출력 뉴런 사이의 가중치(weight)와 편향(bias)을 학습하여 모델의 예측을 수행합니다. 이 레이어는 다음과 같은 수식을 사용하여 출력을 계산합니다:

수식


Dense 레이어는 일반적으로 딥 뉴럴 네트워크의 구성 요소 중 하나로 사용되며, 다양한 출력 형태와 복잡한 모델 아키텍처를 구축하는 데 활용됩니다. 이를 통해 다양한 유형의 데이터에 대한 표현을 학습하고 다양한 작업을 수행하는 강력한 모델을 만들 수 있습니다.

Dropout 레이어

Dropout 레이어는 신경망 모델에서 과적합(overfitting)을 방지하고 모델의 일반화 성능을 향상시키는 데 사용되는 정규화(regularization) 기법 중 하나입니다. 이 레이어는 훈련 중에 무작위로 선택된 일부 뉴런을 비활성화시키는 방식으로 동작하며, 이를 통해 모델이 특정 뉴런에 과도하게 의존하지 않도록 합니다.

주요 매개변수

Dropout 레이어의 주요 매개변수는 다음과 같습니다:

rate: 이 매개변수는 무작위로 비활성화할 뉴런의 비율을 나타냅니다. 일반적으로 0.2에서 0.5 사이의 값을 사용합니다. 예를 들어, rate=0.3이면 각 훈련 배치에서 무작위로 30%의 뉴런이 비활성화됩니다.
Dropout 레이어는 훈련 중에만 활성화되며, 테스트나 예측 단계에서는 비활성화됩니다. 이것은 모델이 훈련 데이터에 대한 일반화를 개선하면서 테스트 데이터에서도 좋은 성능을 보이도록 도와줍니다.

작동 원리

Dropout 레이어의 작동 원리는 다음과 같습니다:

훈련 중: 각 훈련 배치에서 Dropout 레이어에 의해 지정된 비율(rate)에 따라 무작위로 선택된 뉴런들이 비활성화됩니다. 이 뉴런들은 출력에 기여하지 않으며 역전파(backpropagation)를 통해 가중치 업데이트도 되지 않습니다.

테스트/예측 중: Dropout 레이어는 비활성화되고, 모든 뉴런이 활성화됩니다. 이렇게 되면 모델이 훈련 데이터에서 학습한 내용을 적용하여 예측을 수행합니다.

Dropout 레이어를 사용하면 과적합을 줄이고 모델의 안정성을 높일 수 있습니다. 특히 크고 복잡한 신경망 모델에서 효과가 더 큽니다. 이렇게 정규화 기법을 사용하여 모델을 안정화시키면 더 일반화된 예측을 얻을 수 있으며, 실제 데이터에서 더 좋은 성능을 얻을 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Deep-Learning' 카테고리의 다른 글

[Keras] EarlyStopping  (0) 2023.09.21
LSTM(Long Short-Term Memory)  (2) 2023.09.18
[TensorFlow] Tokenizer  (0) 2023.09.13
순환신경망(Recurrent Neural Network, RNN)  (0) 2023.09.13
풀링 레이어 (Pooling Layer)  (0) 2023.09.13