컴공생의 발자취

[인공지능] 모델 구성 코드 및 분석(2) 본문

🧠 AI

[인공지능] 모델 구성 코드 및 분석(2)

MNY 2022. 11. 29. 14:04
728x90
반응형

1. Dropout과 Batch Normalization 비교

  Dropout Batch Normalization
학습 테스트 학습 테스트
loss 1.0370 1.0452 0.8025 0.8858
Accuracy 0.6381 0.6484 0.7235 0.7126

지난 글에서 작성했던 코드는 BatchNormalization의 결과이다. 비교를 위해 Dropout의 결과도 확인해야한다. 그러므로 코드 중 일부를 다음과 같이 변경해준다. 주석처리 해놓았던 Dropout을 주석 '#'을 지워주고 코드에 합류시킨다. 그 후 BatchNormalization을 주석처리 해놓는다. 

# 층을 차례대로 쌓아 tf.keras.Sequential 모델을 만든다..
# 훈련에 사용할 옵티마이저(optimizer)와 손실 함수를 선택:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu', padding='valid', strides=(1,1), input_shape=(32, 32, 3)))
# model.add(tf.keras.layers.BatchNormalization()) # Dropout보다 정확도가 더 높다.
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))


model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
# model.add(tf.keras.layers.BatchNormalization()) # Dropout보다 정확도가 더 높다.
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))

model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu'))
# model.add(tf.keras.layers.BatchNormalization()) # Dropout보다 정확도가 더 높다.
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))

 

1.1 Dropout의 학습결과

Epoch 1/5
1563/1563 [==============================] - 7s 4ms/step - loss: 1.6064 - accuracy: 0.4111
Epoch 2/5
1563/1563 [==============================] - 8s 5ms/step - loss: 1.2739 - accuracy: 0.5448
Epoch 3/5
1563/1563 [==============================] - 6s 4ms/step - loss: 1.1327 - accuracy: 0.5981
Epoch 4/5
1563/1563 [==============================] - 7s 4ms/step - loss: 1.0558 - accuracy: 0.6314
Epoch 5/5
1563/1563 [==============================] - 7s 4ms/step - loss: 0.9855 - accuracy: 0.6575

 

1.2 Dropout의 테스트 결과

=====test result=====
313/313 [==============================] - 1s 2ms/step
313/313 - 1s - loss: 1.0002 - accuracy: 0.6691 - 833ms/epoch - 3ms/step

 Accuracy: 0.6691

 

2. validation 사용 결과

history = model.fit(train_images, train_labels, epochs=5, batch_size=32, validation_split=0.2)

validation loss, accruacy를 통해 검증 데이터를 알 수 있다. 검증은 학습 과정에서 각 에폭마다 학습데이터 전체수의 일정 수를 유효성 검증 셋으로 따로 떼어두고 나머지 학습데이터의 학습된 네트워크를 유효성 검증 셋 테스트를 해 보는 과정을 의미한다. 검증 데이터를 사용하는 이유는 학습 데이터가 부족할 경우 모델이 과적합에 빠지는 것을 막고 모델의 견고성을 높이기 위함이다.

validation 사용 결과 예시

728x90
반응형

'🧠 AI' 카테고리의 다른 글

[인공지능] 모델 구성 코드 및 분석(1)  (0) 2022.11.29