overfitting(과적합)
- 훈련 데이터에 특화된 학습을 하게 되어 새로운 데이터에 대한 예측이 오히려 나빠지거나 학습이 효과가 나타나지 않는 상태
- 충분한 데이터 확보 (데이터가 부족한 경우를 해소)
- Dropout / Ensemble
- Batch Normalization
- L1,L2 Regularization
- Data Augmenation
Dropout
- 지정된 확률의 개수만큼 노드를 랜덤하게 제외하고 학습을 진행
- 완성된 모델에서는 모든 노드를 사용
- 너무 많은 데이터를 제공해도 학습이 잘안되는 부작용이 있다.
H = tf.keras.layers.Dropout(0.2)(H)
Ensemble
- 여러가지 모델을 사용하여 예측하여 과적합을 방지
Batch Normalization
- scale 을 맞춰서 input 하여 데이터 의 과적합을 방지한다
- 표준정규화 하는 계층
- batch 단위로 정규화 하고 , 이동 평균값을 구한다.
H = tf.keras.layers.BatchNormalization()(H)
sparse_categorical_crossentropy
- 다중 분류 손실 함수로 훈련 데이터가 정수 형태로 다중 분류 클래스 일때
사용한다.
X = tf.keras.Input(shape = [28,28])
H = tf.keras.layers.Flatten()(X)
H = tf.keras.layers.Dense(64 , activation = 'swish')(H)
Y = tf.keras.layers.Dense(10 , activation = 'softmax')(H)
model = tf.keras.Model(X,Y)
model.compile(loss="sparse_categorical_crossentropy" , metrics="accuracy")
model.summary()
함수 대체 가능
X = tf.keras.Input(shape=[784])
H = tf.keras.layers.Dense(120, activation=tf.keras.activations.swish)(X)
H = tf.keras.layers.Dense(84, activation=tf.keras.activations.swish)(H)
Y = tf.keras.layers.Dense(10, activation=tf.keras.activations.softmax)(H)
model = tf.keras.Model(X, Y)
model.compile(loss=tf.keras.losses.categorical_crossentropy,optimizer=tf.keras.optimizers.Adam(),metrics=tf.keras.metrics.categorical_accuracy)
- activatoion = activations
- loss= losses
- optimizer = optimizers
- metrics = metrics
- 문자열을 함수화 로 바꿀수 있다.
- 대문자는 클래스 소문자는 함수이다.
Early Stopping
- overfitting 이 발생 할때 멈추기 전 최적의 모델을 적용한다.
tf.keras.callbacks.EarlyStopping(
monitor = 'val_loss',
min_delta = 0
patience = 10,
restore_best_weights = True
early = tf.keras.callbacks.EarlyStopping(monitor = 'val_loss' , patience = 10 ,restore_best_weights=True)
result = model.fit(x_train , y_train , epochs = 50 , batch_size = 128 , validation_split = 0.2 , callbacks=[early])
ResNet
- 100 layer dltkddml rlvdmsakd
- skip connection
- residual learning building block
- pre-activation 구조
- 깊은망 학습의 표준 모델이 됨
tf.keras.layers.Add()([H,H1])