본문 바로가기

~2023

[Keras] Keras 내장 모델 불러오기 또는 모델 구조만 불러오기

728x90
반응형

Dacon 대회에 참여 할 때 높은 정확도를 추출하고자 증명된 모델을 사용하고자 했다.

하지만 대회 규정에는 이미 학습된 모델을 사용하는 것은 위반이기 때문에 모델 구조만 가져오는 법을 찾다가 정리 또는 기록 겸 글을 작성한다.

모델 구조만 불러오는 방법과 학습된 모델를 불러오는게 별 차이가 없어서 같이 기록하려고 한다.

Keras에는 기본적으로 ImageNet 데이터셋에 대해 학습된 모델을 제공해주고 있다.

사용 가능한 모델은 다음과 같다.

  • Xception
  • VGG16, VGG19
  • ResNet, ResNetV2, ResNeXt
  • InceptionV3
  • MobileNet
  • DenseNet
  • NASNet

이제 위 모델을 불러올 때 1)학습된 모델 또는 2)모델 구조만 불러오는 방법을 알아보자.

 

1) import

import tensorflow.keras as keras

keras.applications 아래에 모델 정보가 있기 때문에 keras를 import한다.

 

2) ResNet 메소드 들여보기

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)

예시는 ResNet을 기준으로 설명할 것인데 위 코드들은 메소드가 어떻게 선언되어 있는지 알아보기 위해 덧붙였다.

2-1) 인수

  • 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일 때 커스텀으로 구별할 클래스(레이블)의 수

 

3) 모델 불러오기

imagenet으로 학습된 모델은 다음과 같이 불러 올 수 있다.

model = keras.applications.resnet.ResNet50()

MNIST를 새롭게 학습하기 위한 모델은 다음과 같이 불러 온다.

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

 

4) Compile

모델을 불러온 후에 각자 상황에 맞게 compile()을 사용해준다.

 

 

 

 

 

728x90
반응형