모든 라이브러리를 가져온 후 네트워크를 만들 수 있습니다. 예제에서는 VGG19에 대한 예제를 진행하지만, 신경망 형태는 앞서 살펴본 VGG16과 동일합니다. 그럼 이제 Model Subclassing API를 사용하여 네트워크를 만들어 보겠습니다.
코드 6-15 VGG19 네트워크 생성
class VGG19(Sequential):
def __init__(self, input_shape):
super().__init__()
self.add(Conv2D(64, kernel_size=(3,3), padding='same',
activation='relu', input_shape=input_shape))
self.add(Conv2D(64, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(128, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(128, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides= (2,2)))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(256, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(Conv2D(512, kernel_size=(3,3), padding='same',
activation='relu'))
self.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
self.add(Flatten())
self.add(Dense(4096, activation='relu'))
self.add(Dropout(0.5))
self.add(Dense(4096, activation='relu'))
self.add(Dropout(0.5))
self.add(Dense(1000, activation='softmax'))
self.compile(optimizer=tf.keras.optimizers.Adam(0.003),
loss='categorical_crossentropy',
metrics=['accuracy'])