10장: 조기종료 구현

Early Stopping 방법의 구현 :

 

 

구현 코드 : ( 모르는 함수와 부분에 대해 하나씩 따져본다.)

result :

training

test accuracy

 

 

이 코드의 핵심은 epochs_without_progress 가  loss_val > best_loss 인 경우(즉 loss값이 진전이 없는 경우) += 5씩 증가하여 max 값인 50 을 초과하는 경우 (즉 11번동안 진전이 없을 경우) 조기종료한다. 여기서 문제는 진전이 없는 구간이 local minimum인 경우 최적해가 아니기 때문에 문제가 있으나 위의 예제에서는 해당하지 않는다.

 


with tf.name_scope(“dnn”):  에서 모르는 것:

 

  1. tf.contrib.layers.variance_scaling_initializer()
  2. tf.layers.dense()

 

 

1. tf.contrib.layers.variance_scaling_initializer(factor=2.0, mode=’FAN_IN’, uniform=False, seed=None, dtype=tf.float32)

분산을 스케일링하지 않고 텐서를 생성하는 initializer를 반환한다. 깊은 신경망을 초기화할 때 입력 분산의 스케일을 일정하게 유지하는 것이 원칙적으로 유리하므로 최종 레이어에 도달하여 폭발하거나 감소하지 않는다. 다음 수식을 따른다. (즉, initializer(단위 분산을 가진)를 반환하는 함수)

FAN_IN : 층의 입력 개수

FAN_OUT : 층의 출력 개수

FAN_AVG : 층의 입출력 합을 2로 나눈 것

의 3가지 mode를 가지고 있고 FAN_IN이 기본 값이다. ( n )

 

 

관련 이미지

truncated_normal(shape, 0.0 , stddev=sqrt( factor / n) )

shape에 입력데이터가 들어가고 평균이 0, 표준편차가 sqrt((factor=2) / n(FAN_IN)) 인 절사평균 분포를 return 한다.

 

 

 

 

2. tf.layers.dense():  >>>> keras.layers.dense 로 바뀜

앞서 구현한 neuron_layer와 비슷하다. bias를 따로 설정하지 않아도 알아서 만들어줌

WX + b (affine transformation) 을 만들어 반환하는 함수.

activation=None 은 기본 값으로 linear activation을 뜻한다. use_bias=True가 기본 값으로 boolean형태이며 참이면 bias를 만들어사용한다. kernel_initializer=None은 가중치를 초기화하는 메서드로 None은 tf.get_variable에서 사용하는 기본 initializer로 초기화한다.

 

 

 


with tf.Session() as sess: 에서 모르는 것:

 

  1. np.infty
  2. open 함수

 

1. np.infty : 무한대값을 나타냄

 

2. open(file, mode=’r’, buffering=-1, …) :

file : 에 적힌 path를 연다.

mode : (r)읽기, (w)쓰기, (x)배타적 생성, (a)끝에 추가해서 쓰기, (b)이진파일

 

open 함수 예시:

 

 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다