본문 바로가기
  • 콩's 코딩노트
TensorFlow

TensorFlow 학습할 때 사용하는 epoch와 batch_size의 대해 알아보자.

by Cong_S 2022. 6. 10.
model = Sequential()
model.add( Dense ( units= 6, activation= 'relu', input_shape= (11,) ) )
model.add( Dense( units= 8, activation= tf.nn.relu ) )
model.add( Dense( units= 1, activation= 'sigmoid' ) )

# 위와 같이 신경망 구성이 끝난 후 시퀀셜을 fit 할 때
model.fit(X_train, y_train, epochs = 20, batch_size= 10)

 

위 코드와 같이 신경망의 모델링이 끝난 후 

해당 모델을 가지고 fit (학습) 을 하게 될텐데 

이 때 아주아주 중요한 두 가지 Hyper parameter에 대해 알아보자.

 

먼저 epoch에 대해 알아보자. 

epoch 란? :  epoch 한 번을 했다는 것은,

신경망에서 전체 데이터 셋에 대해 forward pass/backward pass 과정을 거친 것을 말한다.

즉, 1 epoch는 전체 데이터 셋에 대해 한 번의 학습을 완료한 상태

만약, 30 epoch를 했다는 것은 전체 데이터셋으로 30번의 학습을 마쳤다는 것을 의미한다.

 

같은 데이터 셋으로 반복해도 괜찮은 이유는 무엇일까?

정답은 가중치가 계속해서 변하기 때문이다.

backward pass 과정에서 컴퓨터는

결과값을 통해 도출해낸 오차를 가지고 weight(가중치)를 계속해서 변경해나가므로

데이터가 같은 데이터라 하더라도 마지막 결과값은 달라질 수 밖에 없기 때문이다.

그러므로 같은 데이터셋을 반복해도 학습이 가능하다.

 

1/500 으로 쓰여있는 부분은 batch_size로 나누어진 1 epoch_step으로 

전체 학습데이터 = batch_size * epoch_step 이다.


다음은 batch_size 파라미터에 대해 알아보자.


batch_size란? : 메모리의 한계와 속도 저하 때문에

대부분의 경우에는 한 번의 epoch에서 모든 데이터를 한꺼번에 집어넣을 수는 없습니다.

그래서 데이터를 나누어서 주게 되는데,

이때 몇 번 나누어서 주는가를 iteration(반복),

각 iteration마다 입력해주는 데이터의 사이즈를 batch size라고 합니다.

 

정리하면 전체 데이터셋을 한번에 연산하게 되면

메모리의 한계점에 의해 속도와 성능 저하 등의 문제가 생기므로

전체 데이터셋 중 일부를 나누어서 연산하도록 size를 정해주는 것을 말한다.

 

 

댓글