본문 바로가기
Machine Learning

내 데이터로 ResNet 돌려보기

by swiftyElly 2020. 9. 9.
📌
캡스톤 프로젝트 내 데이터로 pkl 파일 만들어서 적용하는 과정은 🤯내 데이터로 CNN 돌려보기
🧐
왜 ResNet? 현재 모델의 정확도가 좋지 않은 상태. 논문에 나오는 구조를 참고한 CNN 모델의 깊이가 얕아서 발생한 문제라고 판단. 교수님이 Resnet 모델을 추천해주셨다.

 

원래 만들었던 CNN 구조

super(AcousticSoundModel, self).__init__()
        self.conv1 = Conv2D(filters=64, kernel_size=[3, 3], padding='SAME', activation=tf.nn.relu)
        self.drop1 = Dropout(rate=0.2)
        self.pool1 = MaxPool2D(padding='SAME')
        
        self.conv2 = Conv2D(filters=64, kernel_size=[3, 3], padding='SAME', activation=tf.nn.relu)
        self.drop2 = Dropout(rate=0.2) #20% dropout
        self.pool2 = MaxPool2D(padding='SAME')
        
        self.conv3 = Conv2D(filters=64, kernel_size=[3, 3], padding='SAME', activation=tf.nn.relu)
        self.drop3 = Dropout(rate=0.2) #20% dropout
        self.pool3 = MaxPool2D(padding='SAME')
        
        self.pool3_flat = keras.layers.Flatten()
        self.dense4 = Dense(units=128, activation=tf.nn.relu)
        self.dense5 = Dense(units=3, activation=tf.nn.sigmoid)

 

resnet으로 바꿔보겠음 ~,~ 공식 문서를 보면서 해보겠음!

우선 ResNet을 import 해준다

from keras.applications import ResNet50

 

resnet50은 이렇게 생겼다.

tf.keras.applications.ResNet50(
    include_top=True, weights='imagenet', input_tensor=None, input_shape=None,
    pooling=None, classes=1000, **kwargs
)

 

파라메터 설명을 보는데,

width and height should be no smaller than 32 아,,, 우리 이미지 사이즈 32,,,,

 

일단 해봤다.

model = ResNet50(include_top=True, weights='imagenet', input_shape=(32, 32, 3), pooling=max, classes=3)

에러났다.

weightsimagenet을 쓰려면 classes가 1000이어야 한다고 해서 weights=None으로 설정했다.

model = ResNet50(include_top=True, weights=None, input_shape=(32, 32, 3), pooling=max, classes=3)

 

이제 학습 돌려보기!

model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam') 
model.fit(train_images, train_labels, batch_size=64, epochs=10, validation_data=(valid_images, valid_labels))

저번보다 아주아주 조금 괜찮아졌다.

 

이제 조금 업그레이드 해보겠다 ~,~

early stopping, model checkpoint를 넣어보자

es = tf.keras.callbacks.EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=10)
save = tf.keras.callbacks.ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', save_best_only=True)
callback = [es, save]

그리고 100 epoch 동안 실행해서 early stopping이 잘 실행되는지 확인해보겠음

hist = model.fit(train_images, train_labels, batch_size=64, epochs=100, validation_data=(valid_images, valid_labels), callbacks=callback)

13 에포크에서 early stopping이 된 걸 확인!

 

테스트 해보니

오 정확도 0.6으로 올랐네

 

이제 이미지 사이즈를 (256, 256)로 해보겠다!

주피터로 하니까 노트북이 죽으려고 해서 AWS로 가서 해보겠음,,

👉

댓글