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
반응형
'~2023' 카테고리의 다른 글
[Server] Windows 10 환경에서 Apache 서버 구축 (0) | 2021.12.03 |
---|---|
[React] React Icons 사용하기 (0) | 2021.11.30 |
[vi/vim] vi/vim 명령어 깔끔하게 정리 (0) | 2021.11.22 |
[MAC] M1칩 Homebrew 설치 - path 설정 필수! (0) | 2021.11.21 |
[CV] 데이터를 학습 데이터와 검증 데이터로 분류하기 - train, validation (0) | 2021.11.17 |