CNN Application

재구몬·2021년 7월 31일
0

Deep Learning

목록 보기
7/12
post-thumbnail

이번 글에서는 텐서플로우를 이용하여 층을 설정하고 심층학습을 해보도록 하자

  • Layers in TF Keras: tf.keras
    케라스(Keras)는 파이썬으로 작성된 오픈소스 신경말 라이브러리로 텐서플로우 위에서 층을 설정할 때 불러오게될 모듈에 해당한다.
  • Sequential API
    케라스 모듈에서 각각의 층을 add()를 통해 쉽게 추가할 수 있으며, 배열 방식으로 모델을 쉽게 생성하도록 도와주는 도구이다.

Create Model


testModel을 만들어 보도록 하자. 이 모델의 층은 ZEROPAD2D -> CONV2D -> BATCHNORM -> RELU -> MAXPOOL -> FLATTEN -> DENSE로 구성되어 있다.

def testModel():
    model = tf.keras.Sequential([
            ## ZeroPadding2D with padding 3, input shape of 64 x 64 x 3
            tfl.InputLayer(input_shape=(64,64,3)),
            tfl.ZeroPadding2D(padding=(3,3)),
            ## Conv2D with 32 7x7 filters and stride of 1
            tfl.Conv2D(filters=32, kernel_size=(7,7), strides=(1,1)),
            ## BatchNormalization for axis 3
            tfl.BatchNormalization(axis=3),
            ## ReLU
            tfl.ReLU(),
            ## Max Pooling 2D with default parameters
            tfl.MaxPooling2D(),
            ## Flatten layer
            tfl.Flatten(),
            ## Dense layer with 1 unit for output & 'sigmoid' activation
            tfl.Dense(units=1, activation='sigmoid')
        ])
    return model

위와 같은 방식으로 일련의 연결을 만든 후에 다음과 같이 각 층에 대한 정보를 얻을 수 있다.

test_model = testModel()
# Print a summary for each layer
for layer in summary(test_model):
    print(layer)

추가로 위의 층을 정의하는 방식을 keras.model을 통해서 다음과 같이 시도할 수 있다.

def convolutional_model(input_shape):
    input_img = tf.keras.Input(shape=input_shape)
    Z1 = tfl.Conv2D(filters=8, kernel_size=(4,4), strides=(1,1), padding="same")(input_img)
    ## RELU
    A1 = tfl.ReLU()(Z1)
    ## MAXPOOL: window 8x8, stride 8, padding 'SAME'
    P1 = tfl.MaxPool2D(pool_size=(8,8), strides=(8,8), padding="same")(A1)
    ## CONV2D: 16 filters 2x2, stride 1, padding 'SAME'
    Z2 = tfl.Conv2D(filters=16, kernel_size=(2,2), strides=(1,1), padding="same")(P1)
    ## RELU
    A2 = tfl.ReLU()(Z2)
    ## MAXPOOL: window 4x4, stride 4, padding 'SAME'
    P2 = tfl.MaxPool2D(pool_size=(4,4), strides=(4,4), padding="same")(A2)
    ## FLATTEN
    F = tfl.Flatten()(P2)
    ## Dense layer
    ## 6 neurons in output layer. Hint: one of the arguments should be "activation='softmax'" 
    outputs = tfl.Dense(units=6, activation="softmax")(F)

    model = tf.keras.Model(inputs=input_img, outputs=outputs)
    return model

Implementation Model


모델을 만들었다면 최적화 방식과 각 손실함수를 설정해줄 수 있다.

test_model.compile(optimizer='adam',
                   loss='binary_crossentropy',
                   metrics=['accuracy'])

관련된 인자의 개수는 .summary()를 이용하여 확인할 수 있다.

test_model.summary()

Training Model

트레이닝 데이터를 통한 학습 과정은 .fit()을 통해 진행된다.

history = test_model.fit(X_train, Y_train, epochs=10, batch_size=16)

위의 계산 설정에서 binary_crossentropyaccuracy를 선택했기 때문에 학습의 결과를 .evaluate()을 통해서 확인할 수 있다. 각 과정에서의 기록을 살펴보고 싶다면 .history 객체를 불러오면 된다.

test_model.evaluate(X_test, Y_test)
history.history

Review


지금까지의 과정을 정리하면 다음과 같다.
1. tfl.Sequential([...])
2. test_model.compile(...)
3. tes_model.fit(...)

Reference

profile
아직 거북이지만 곧 앞질러 갈겁니다.

0개의 댓글