본문 바로가기
DataScience/MachineLearning

딥러닝 텐서플로우 softmax, overfitting, callbacks 지난 10개분류문제 예시글에 이은 추가내용

by leopard4 2022. 12. 29.

1. softmax로 나온결과를, 레이블 인코딩으로 바꾸는 방법

softmax는 텐서플로우의 모델을 만들때, 

마지막 레이어, 즉 아웃풋 레이어의 수가 3개 이상일때 사용한다

만약 아웃풋의 노드가 10개라고 한다면 

10개를 비교해서 최종값을 결정해야 하는데 

소프트맥스는 거기에 최적화 되있기 때문이다.

소프트 맥스는 총합이 1이되는

즉 0.1, 0.2, 0.7... 형태로 나온다 

그럼 여기서 가장큰 값 0.7이  최종값이 되는것이다 .

 

2. 에포크, 학습데이터/밸리데이션데이터와 오버피팅

에포크는 학습을 시킬 횟수를 의미한다 . 

그렇다고 에포크가 너무 많아도 문제가 될수있다.

에포크를 많이하면 이미 알고있는 문제는 잘 맞추지만 

새로운 데이터가 들어오면 오히려 못맞추게 되는 문제가 발생한다.

그것이 오버피팅이다.

오버피팅을 확인하는 간단한 방법은 

학습결과를 변수로 저장해서 변수.history 함수를 

plot으로 그려보는것이다 .

오버피팅

밸리대이션 로스는 모델학습중 중간시험을 보는결과인데

그래프를보면 오히려 증가하는것을 볼수있다 

오버피팅

정확도 역시 오히려 떨어지는것을 볼수있다 . 

그렇기 때문에 적절한 에포크를 찾는것이 중요하다.

 

3.텐서플로우의 콜백클래스를 이용해서, 원하는 조건이 되면 학습을 멈추게 하는 코드

텐서플로우는 프레임워크다 

프레임워크의 사용법을 참조해보면 

class myCallback(tf.keras.callbacks.Callback) :  
  def on_epoch_end(self, epoch, logs= {} ) :
    if logs[ 'val_accuracy'] > 0.88 :
      print('\n내가 정한 정확도에 도달했으니, 학습을 멈춘다.')
      self.model.stop_training = True

이같은 코드를 작성할수 있다 

클래스 이름은 내마음대로 정하지만, 

클래스의 파라미터,

함수의 이름은 이미 프레임워크에서 정해놓은것이고,

내가 더할수 있는코드는

if 부터 시작하는 코드이다.

 

이코드는 내가 정한 정확도에 도달했으니, 학습을 멈추라는 코드 

 

# 사용 예시 

epoch_history = model.fit(X_train,y_train, epochs=30, validation_split = 0.2, callbacks = [my_cb] )

아웃풋을 보면 잘 멈추는것을 확인할 수있다.