일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- pytorch
- ML
- python
- UUID
- GCP
- Backoff
- onnx #openvino #tf2onnx #openvinokeras
- Gunicorn
- overloaed
- Python #for문 #while문 #응애
- 파이썬 #기초 #응애
- OpenAI
- MySQL
- docker
- BitCoin
- ML #머신러닝
- CentOS
- 고유값
- 매매봇
- GPT
- GPT API
- DataLoader
- Python #open #read #파이썬
- leetcode
- Flask
- Mecab
- vram
- NLP
- GPU
- Anaconda
- Today
- Total
람쥐썬더
[PYTHON] keras.applications 의 모델 사용하기 본문
딥러닝을 위해 모델을 차근차근 쌓는것도 방법이 될 순 있지만 ( 맨날 헷갈려서 잘 못함 )
구글이라는 초 일류 세계 S급 짱짱기업에서 제공해주는 모델을 사용하는것도 하나의 방법이 될 수 있다.
keras documents(https://keras.io/ko/applications/)
를 보면 가져다 쓸 수 있는 모델들이 볼 수 있다
각 모델의 깊이와 정확성(ImageNet 기준?) 그리고 파라미터 , 사이즈 등등
그와중에 인셉션레스넷v2는 깊이 후덜덜하넹;;
사실 텐서플로에서 보는게 더 깔끔하고 많다
https://www.tensorflow.org/api_docs/python/tf/keras/applications
Module: tf.keras.applications | TensorFlow Core v2.9.1
Keras Applications are premade architectures with pre-trained weights.
www.tensorflow.org
직접가서 보는게 사실 도움이 제일 큰데
글을 쓰는 큰 목적은 맨날 모델 가져와서 쓰려할때마다 까먹어서 저장용으로..
이게 모델마다 받는 인자값들이 다르기 때문에 자주쓰는 ResNet50 기준으로 저장을 해보려한다
from tensorflow.keras.applications import ResNet50
ResNet = ResNet50(
include_top=True,
weights='imagenet',
input_tensor=None,
input_shape=None,
pooling=None,
classes=1000
)
기본 예제를 토대로 가져온 코드이다
include_top의 경우 처음 봤을때 헷갈렸던게 찾아보니까 완전연결층을 상단에 포함한다는 개념이라서 뭘 포함한다는거지? 했는데 그냥 맨 마지막 output에 Dense층을 추가해 주는 개념이였다 (자세히는 모름 ㅋ) 사실 그냥 summary로 보면 include_bottom 이 더 낫지 않을까 싶기도 하궁;
input_shape과 input_tensor는 비슷한 개념인거 같은데
tensor로 지정을 할거면 keras.layers.Input(shape( h,w,c )) 형식으로 지정 해 주면 된다
근데 나는 shape으로 걍 만들었다 여태 input_shape = (512,512,3) 이런식으로;;
weights는 말그대로 가중치 'imagenet'을 지정하면 이미지넷 학습했던 가중치가 포함되게 된다
커스텀 weights를 넣을거면 같은 shape을 가진 모델의 weights를 파일로 저장해두고 경로를 지정해주면 된다
(이거 좀 헷갈리는데 지정할때 모델 모양이 다르면 안된다 그래서 모델을 다 만들어두고 load_weights로 가중치를 불러왔었음)
pooling은 inclide_top = False 일때 마지막 pooling 층을 멀로 설정할지 적어주면댄다 ( 'avg' , 'max' , None )
classes는 마지막 완전연결층이 있다 쳤을때 최종적으로 뽑아줄 output 갯수를 의미한다 이미지넷이 1000개라 1000이 기본으로 돼있나부다
이건 이미지넷 학습되어 있는 모델 불러오는 base고
이 ResNet50 을 backbone으로 하는 커스텀 모델을 만들어 보고자 한다
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.layers import Conv2D, Dense, MaxPooling2D, Dropout, Flatten, BatchNormalization, GlobalAveragePooling2D
from tensorflow.keras import Model
img_size= 512
backbone = ResNet50(input_shape=(img_size, img_size, 3),
weights= None,
include_top=False)
model = backbone.output
model = GlobalAveragePooling2D()(model)
model = BatchNormalization()(model)
model = Dense(256, activation='relu')(model)
output = Dense(units=10, activation=None, name='output_layer')(model)
resnet_custom = Model(inputs=backbone.input, outputs=output)
resnet_custom.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics='accuracy')
backbone = ResNet50으로 input_shape을 지정해주고
weights는 받지 않았다 ( 가중치 처음부터 학습할거라서 )
마지막 완전 연결층도 직접 쌓아줄 것이기 때문에 False로 뒀다 ( 생각해보니까 모델 쌓는거니까 마지막에 쌓아주는 Output이 Top이 맞네 헉 , include_top 이 맞다 ㄷㄷ )
이후 model 변수를 backbone의 output으로 지정해주고
그 밑에 GAP, BN, Dense 차곡 차곡 올려준다
이후 keras.Model 을 이용하여
inputs에는 backbone.input
outputs 에는 방금 쌓아준 output을 넣어주면 모델이 완성이 된다
그리고 컴파일하고 학습하면 끝!
'파이썬' 카테고리의 다른 글
[PYTHON] API 연동 [POST] Token 받기 (0) | 2022.07.20 |
---|---|
[PYTHON] tensorflow2 keras 모델로 openvino 활용 inference (0) | 2022.07.04 |
[PYTHON] 기본 문법 정리 [ 함수 ] (0) | 2021.07.20 |
[PYTHON] 기본 문법 정리3 [open함수] (0) | 2021.07.07 |
[PYTHON] 기본 문법 정리2 [ 반복문 ] (0) | 2021.07.06 |