[TensorFlow 2.0] Optimizer 및 Training (Keras)IT/AI2022. 9. 8. 00:39
Table of Contents
반응형
Load Packages
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras import datasets
학습 과정 돌아보기
Prepare MNIST Datset
(train_x, train_y), (test_x, test_y) = datasets.mnist.load_data()
Build Model
inputs = layers.Input((28, 28, 1))
net = layers.Conv2D(32, (3, 3), padding='SAME')(inputs)
net = layers.Activation('relu')(net)
net = layers.Conv2D(32, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(0.25)(net)
net = layers.Conv2D(64, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.Conv2D(64, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(0.25)(net)
net = layers.Flatten()(net)
net = layers.Dense(512)(net)
net = layers.Activation('relu')(net)
net = layers.Dropout(0.5)(net)
net = layers.Dense(10)(net) # num_classes
net = layers.Activation('softmax')(net)
model = tf.keras.Model(inputs=inputs, outputs=net, name='Basic_CNN')
Optimization
모델을 학습하기 전에 설정을 합니다.
- Loss Function
- Metrics
- Optimizer
Loss Function
Categorical vs Binary
loss = 'binary_crossentropy'
loss = 'categorical_crossentropy'
sparse_categorical_crossentropy vs categorical_crossentropy
loss_fun = tf.keras.losses.sparse_categorical_crossentropy
# 또는
tf.keras.losses.categorical_crossentropy
tf.keras.losses.binary_crossentropy
Metrics
모델을 평가하는 방법입니다.(정확도 측정)
- Accuracy : 예측이 레이블과 일치하는 빈도를 계산
- BinaryAccuracy: 예측이 이진 레이블과 일치하는 빈도를 계산
- CategoricalAccuracy : 예측이 one-hot 레이블과 일치하는 빈도를 계산
- TopKCategoricalAccuracy : 상위 K 예측에서 대상이 얼마나 자주 나타되는지 계산
- SparseTopKCategoricalAccuracy : 상위 K 예측에서 정수 대상이 얼마나 자주 나타하는지 계산
# accurany를 이름으로 넣는 방법
metrics = ['accuracy']
# tf.keras.metrics
metrics = [tf.keras.metrics.CategoricalAccuracy()]
Optimizer
- 'sgd'
- 'rmsprop'
- 'adam'
optm = tf.keras.optimizers.Adam()
# Out
tf.keras.optimizers.SGD()
tf.keras.optimizers.RMSprop()
tf.keras.optimizers.Adam()
Compile
Optimizer 적용을 합니다.
model.compile(optimizer=optm,
loss=loss_fun,
metrics=metrics)
Prepaer Dataset
학습에 사용할 데이터셋을 준비합니다.
데이터셋 확인
train_x.shape, train_y.shape
> ((60000, 28, 28), (60000,))
test_x.shape, test_y.shape
> ((10000, 28, 28), (10000,))
차원 수 늘리기
import numpy as np
np.expand_dims(train_x, -1).shape
> (60000, 28, 28, 1)
tf.expand_dims(train_x, -1).shape
> TensorShape([60000, 28, 28, 1])
# 최신 버전
train_x = train_x[..., tf.newaxis]
test_x = test_x[..., tf.newaxis]
Rescaling
np.min(train_x), np.max(train_x)
> (0, 255)
train_x = train_x / 255.
test_x = test_x / 255.
np.min(train_x), np.max(train_x)
> (0.0, 1.0)
Training
본격적으로 학습을 해봅니다. 그 전에 학습용 Hyperparameter 설정을 합니다.
num_epochs, batch_size
# 전체 sample 데이터를 이용하여 한 바퀴 돌며 학습하는 것을 1회 epoch이라 부릅니다.
num_epochs = 1
# 모델에 한번에 들어가는 데이터 수를 조절하여 메모리 사용 효율을 향상시킵니다.
batch_size = 32
실행!
model.fit(train_x, train_y,
batch_size=batch_size,
shuffle=True,
epochs=num_epochs)
# Result
Train on 60000 samples
60000/60000 [==============================] - 99s 2ms/sample - loss: 0.1414 - categorical_accuracy: 0.0992
반응형
'IT > AI' 카테고리의 다른 글
[TensorFlow 2.0] Evaluating & Prediction (0) | 2022.09.10 |
---|---|
[TensorFlow 2.0] Optimizer 및 Training (Expert) (0) | 2022.09.08 |
[TensorFlow 2.0] 각 Layer별 역할 및 파라미터 (0) | 2022.09.07 |
[TensorFlow 2.0] 예제 데이터셋 (MNIST) 사용 (0) | 2022.09.07 |
[Tensorflow 2.0] 기초 사용법 (0) | 2022.09.06 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!