1 minute read

데이콘 대회에 참여할 때 높은 정확도를 추출하고자 좋은 성능을 보여주는 모델을 사용하고자 했다.
하지만 대회 규정에서 학습된 모델을 사용하는 것이 위반이 될 경우가 있기 때문에 모델 구조만 불러와 내 데이터셋으로 학습시켰다.
모델 구조만 불러오는 방법과 학습된 모델을 불러오는 방법이 별 차이가 없어서 같이 기록하려고 한다.

Keras의 학습된 모델은 ImageNet 데이터셋으로 학습되었으며, 다음 모델들을 제공한다.
Xception, VGG, ResNet, Inception, MobileNet, DenseNet, NASNet …

Import

1
import tensorflow.keras as keras

Code

Keras에서는 많은 모델을 제공하지만, 예시로 ResNet을 기준으로 작성하겠다.
Keras 공식 문서에 있는 ResNet 모델들은 다음과 같이 정의되어 있다.

ResNet 정의

1
2
3
4
5
6
7
8
keras.applications.resnet.ResNet50(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet.ResNet101(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet.ResNet152(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet_v2.ResNet50V2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet_v2.ResNet101V2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet_v2.ResNet152V2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnext.ResNeXt50(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnext.ResNeXt101(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

매개변수

  • include_top: 네트워크에 FC-layer를 넣을지 말지 Boolean (커스텀 할지 말지 여부 결정)
  • weights: 구조만 가져오고 싶으면 None, 아니면 default가 ‘imagenet’이기 때문에 속성 넣지 않기
  • input_tensor: 첫번째 Conv2D의 input_shape라 생각하면 됨 (선언 방법: keras.layers.Input(shape=(w, h, c)))
  • pooling: include_top이 False일 때 None, avg, max 중 선택
  • classes: include_top이 True이고 weights가 None일 때 커스텀으로 구별할 클래스(레이블)의 수

모델 불러오기

학습된 모델은 다음과 같이 호출한다.

1
model = keras.applications.resnet.ResNet50()

모델 구조만 따로 호출하고 MNIST를 학습하기 위한 모델은 다음과 같이 호출한다.

1
model = keras.applications.resnet.ResNet50(weights=None, input_tensor=keras.layers.Input(shape=(28, 28, 1)), classes=10)

Compile

모델을 불러온 후에 각자 상황에 맞게 compile()을 해주면 된다.