[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

합성곱 신경망(CNN) - 기본구조 구현

inu 2020. 8. 14. 09:31
반응형
  • 모델이 복잡해짐에 따라 텐서플로우를 사용함
  • 본 문서는 개인적 학습을 위해 작성된 문서임

데이터셋 불러오기

import tensorflow as tf 
print(tf.__version__)

fashion_mnist=tf.keras.datasets.fashion_mnist
(train_X,train_Y),(test_X,test_Y)=fashion_mnist.load_data()
# fashion_mnist-의류이미지/10개의범주/단일채널/28*28

print(len(train_X),len(test_X))
# 데이터의수확인하기(학습데이터수6만개/ 테스트데이터수1만개)60000 10000
  • 구현에 사용될 데이터셋을 불러온다.

데이터 정규화

train_X = train_X/255.0
test_X = test_X/255.0
  • 데이터셋에 대해 최소-최대 정규화를 진행한다.
  • (X-MIN) / (MAX-MIN)

모델 제작

model=tf.keras.Sequential([tf.keras.layers.Conv2D(input_shape=(28,28,1),kernel_size=3,3),filters=32),
tf.keras.layers.MaxPool2D(strides=(2,2),pool_size=(2,2)),
tf.keras.layers.Conv2D(kernel_size=(3,3),filters=64),
tf.keras.layers.AvgPool2D(strides=(2,2)),
tf.keras.layers.Conv2D(kernel_size=(3,3),filters=128),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(units=128,activation='relu'),
tf.keras.layers.Dropout(rate=0.3),
tf.keras.layers.Dense(units=10,activation='softmax')])
  • 텐서플로우 Sequential을 이용해 모델을 쌓는다.
  • 합성곱 계층과 풀링계층(최대치풀링, 평균풀링), 드롭아웃까지 모두 활용했다.
  • 풀링과 드롭아웃이 학습이 과적합되는 것을 방지해준다.
  • filters : 몇개의필터를생성할것인지(점점 많아지는 것이 좋음.)
  • strides : 건너뛰기(default(1,1))
  • padding : 패딩방식(default'valid')

모델 학습

model.compile(optimizer=tf.keras.optimizers.Adam(),loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(train_X,train_Y,epochs = 500,validation_split=0.25,callbacks= tf.keras.callbacks.EarlyStopping(patience=5,monitor='val_loss')])
  • 최적화 방식으로는 아담방식을 사용한다.
  • 손실함수는 교차엔트로피를 사용한다.
  • 평가지표는 accuracy(정확도)이다.
  • callback 으로 EarlyStopping을 사용했다. val_loss가 5번 연속으로 상승되지 않으면 학습을 중단한다.

평가

model.evaluate(test_X,test_Y)
==결과==
loss: 0.3248 -accuracy: 0.8921
반응형