주석을 봐도 모르겠으면 알려주세요
# Day_22_02_VGG.py
import tensorflow as tf
def model_vgg_dense():
# slim 라이브러리에 있는 vgg 파일을 활용해서 케라스 vgg 모델을 구현하세요
# 결관 summary 함수를 통해 shape 로 확인합니다.
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=[224, 224, 3])) # input 바꾸지 않을 것임
# 1번째 conver 완료
model.add(tf.keras.layers.Conv2D(64, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(64, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 2번째 conver 완료
model.add(tf.keras.layers.Conv2D(128, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(128, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 3번째 conver 완료
model.add(tf.keras.layers.Conv2D(256, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(256, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(256, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 4번째 conver 완료
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 5번째 conver 완료
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(4096, activation='relu'))
model.add(tf.keras.layers.Dense(4096, activation='relu'))
model.add(tf.keras.layers.Dense(1000, activation='softmax'))
model.summary()
def model_vgg_conv2d():
# dense 레이어를 conv2d 레이어로 교체한다.
# 결관 summary 함수를 통해 shape 로 확인합니다.
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=[224, 224, 3])) # input 바꾸지 않을 것임
# model.add(tf.keras.layers.Conv2D(64, [2, 2], 2, 'same', activation='relu'))
# same 과 valid 옵션 설명
# same -> 삐져 나온 것을 어떤 것을 추가해서 나눠 떨어지게 함 stride 1인 경우에는 절대 줄어들지 않음
# valid -> 삐져 나온 것을 버려버림 (남는 빅셀)
# 1번째 conver 완료
model.add(tf.keras.layers.Conv2D(64, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(64, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 2번째 conver 완료
model.add(tf.keras.layers.Conv2D(128, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(128, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 3번째 conver 완료
model.add(tf.keras.layers.Conv2D(256, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(256, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(256, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 4번째 conver 완료
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
# 5번째 conver 완료
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.Conv2D(512, [3, 3], 1, 'same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D([2, 2], 2, 'same'))
model.add(tf.keras.layers.Conv2D(4096, [7, 7], 1, 'valid', activation='relu'))
model.add(tf.keras.layers.Conv2D(4096, [1, 1], 1, activation='relu'))
model.add(tf.keras.layers.Conv2D(1000, [1, 1], 1, activation='softmax'))
model.summary()
# model_vgg_dense()
model_vgg_conv2d()
'인공지능 > CNN' 카테고리의 다른 글
이미지 증식 (0) | 2020.12.09 |
---|---|
이미지 사이즈 조절 및 이미지 분석 (feat. VGG) (0) | 2020.12.04 |
LeNet5 (0) | 2020.12.04 |
#2 (#1에서 했던) CNN 코드 Keras 사용해보기 (0) | 2020.12.01 |
#1. CNN, Keras를 사용하지 않고 내부 살펴보기 (0) | 2020.12.01 |