코딩
[TensorFlow] Vision Modeling(1) MNIST 태스크 모델링하기
LittleFox
2021. 6. 6. 21:48
🙋♀️ TensorFlow Conv2D와 MaxPooling2D layer을 익히고, 모델을 만들어 학습하기
1. TensorFlow Conv2D
TensorFlow Conv2D> https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D
- tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding='valid',
data_format=None, dilation_rate=(1, 1), groups=1, activation=None, ...
)- filters : 아웃풋 차원 수
- kernel_size : 2d ConV 윈도우의 height & width 설정
- strides : stride에 대한 height & width 설정 / stride가 1이 아닐 경우 dilation_rate는 반드시 1로 설정
- padding: valid → no padding / same → 아웃풋 차원이 인풋 차원과 같도록 zero padding 수행
- dilation_rate : dilated convolution에 사용할 dilation rate 지정
- Input Shape: 4+차원의 텐서
- data_format='channels_last' 일 경우, [배치사이즈, ( row 수, column 수, 채널수 )] 차원 (default)
- data_format='channels_first' 일 경우, [배치사이즈, ( 채널수, row 수, column 수 )] 차원
- Output Shape: 4+차원의 텐서
- data_format='channels_last' 일 경우, [배치사이즈, ( 새로운 row 수, 새로운 column 수, filter 수 )] (default)
- data_format='channels_first' 일 경우, [배치사이즈, ( filter 수, 새로운 row 수, 새로운 column 수 )]
2. MNIST 태스크를 Convolution Neural Network를 활용하여 모델링하기
MNIST 태스크>>
2021.06.06 - [코딩] - [TensorFlow] 텐서플로우 2.0 기본 - Sequential & Functional API
2-1) 데이터 준비하기
- MNIST 데이터는 28x28 차원의 흑백 이미지
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
print(x_train.shape, x_test.shape)
- numpy의 expand_dims 함수를 사용해 channel 부분에 해당하는 차원을 만들어줌
import numpy as np
# 인풋 이미지를를 3차원 텐서로 바꾸기
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
print(x_train.shape, x_test.shape)
2-2) 모델 정의하고 컴파일하기
- TensorFlow Sequential API를 활용해 아래와 같은 모델을 만들 것
# Layer 쌓기
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, kernel_size=(3,3), activation="relu", input_shape=(28,28,1)),
tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
tf.keras.layers.Conv2D(64, kernel_size=(3,3), activation="relu"),
tf.keras.layers.MaxPooling2D(pool_size=(2,2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation='softmax')
])
# 모델 컴파일하기
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.summary()
2-3) 모델 학습하기
# EarlyStopping Callback 정의하기
callback = tf.keras.callbacks.EarlyStopping(
monitor='val_loss', min_delta=0, patience=1, verbose=0,
mode='auto', baseline=None, restore_best_weights=False
)
# Model.fit을 통해 학습하기
model.fit(
x=x_train, y=y_train, batch_size=32, epochs=50, verbose=1,
callbacks=callback, validation_split=0.2)