이번 글에서는 텐서플로우를 이용하여 층을 설정하고 심층학습을 해보도록 하자
tf.keras
add()
를 통해 쉽게 추가할 수 있으며, 배열 방식으로 모델을 쉽게 생성하도록 도와주는 도구이다.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
모델을 만들었다면 최적화 방식과 각 손실함수를 설정해줄 수 있다.
test_model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
관련된 인자의 개수는 .summary()
를 이용하여 확인할 수 있다.
test_model.summary()
트레이닝 데이터를 통한 학습 과정은 .fit()
을 통해 진행된다.
history = test_model.fit(X_train, Y_train, epochs=10, batch_size=16)
위의 계산 설정에서 binary_crossentropy
와 accuracy
를 선택했기 때문에 학습의 결과를 .evaluate()
을 통해서 확인할 수 있다. 각 과정에서의 기록을 살펴보고 싶다면 .history
객체를 불러오면 된다.
test_model.evaluate(X_test, Y_test)
history.history
지금까지의 과정을 정리하면 다음과 같다.
1. tfl.Sequential([...])
2. test_model.compile(...)
3. tes_model.fit(...)