반응형
ResNet 구현하기
ResNet에 처음 소개된 Residual Connection은 모델 내의 지름길을 새로 만든다고도 하여 Skip Connection이라고도 불리며,
레이어 개수가 매우 많은 경우에 발생할 수 있는 기울기 소실(Vanishing Gradient) 문제를 해결하고자 등장

import tensorflow as tf
from tensorflow.keras import layers, Model, Sequential
class ResidualBlock(Model):
def __init__(self, num_kernels, kernel_size):
super(ResidualBlock, self).__init__()
# TODO: [지시사항 1번] 2개의 Conv2D Layer를 추가
self.conv1 = layers.Conv2D(num_kernels, kernel_size=kernel_size, padding="same", activation="relu")
self.conv2 = layers.Conv2D(num_kernels, kernel_size=kernel_size, padding="same", activation="relu")
self.relu = layers.Activation("relu")
# TODO: [지시사항 1번] Add Layer를 추가
# Add(x, y)
self.add = layers.Add()
def call(self, input_tensor):
x = self.conv1(input_tensor)
x = self.conv2(x)
x = self.add([x, input_tensor]) # 두 값을 더하는 과정
x = self.relu(x)
return x
def build_resnet(input_shape, num_classes):
model = Sequential()
model.add(layers.Conv2D(64, kernel_size=(3, 3), padding="same", activation="relu", input_shape=input_shape))
model.add(layers.MaxPool2D(2))
model.add(ResidualBlock(64, (3, 3)))
model.add(ResidualBlock(64, (3, 3)))
model.add(ResidualBlock(64, (3, 3)))
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(num_classes, activation="softmax"))
return model
def main():
input_shape = (32, 32, 3)
num_classes = 10
model = build_resnet(input_shape, num_classes)
model.summary()
if __name__=="__main__":
main()
'파이썬 이것저것 > 파이썬 딥러닝 관련' 카테고리의 다른 글
[python] Yolo v5 object detection 고추 병해 데이터 셋 학습해보기 (0) | 2022.08.02 |
---|---|
[Python] 딥러닝 ViT 모델을 활용하여 고추잎 질병 이미지 판별 (0) | 2022.07.26 |
[Python] 딥러닝 CNN(VGG16 모델 구현하기) (0) | 2022.07.17 |
[Python] 딥러닝 CNN 연산 (0) | 2022.07.17 |
[Python] Tensorflow 커스텀 데이터셋 불러오기 (0) | 2022.07.17 |