반응형
배치 수없이 들어봤지만 정확히 뭔지는 모를 수 있다. 바닥부터 알아보자.
배치(Batch)란?
간단하게 말하면 묶음이다.
입력 데이터를 돈다발처럼 묶어 놓은 것이다. 구현을 통해 왜 사용하는지 알아보자.
배치 구현
x, t = get_data()
network = init_network()
batch_size = 100 # 배치 크기
accuracy_cnt = 0
for i in range(0, len(x), batch_size): # 1
x_batch = x[i:i+batch_size]
y_batch = predict(network, x_batch)
p = np.argmax(y_batch, axis=1) # 2
accuracy_cnt += np.sum(p == t[i:i+batch_size]) # 결과 보기
print(str(accuracy_cnt / len(x)))
자 이것만 보면 뭔 소린가 싶다.
한 줄씩 분석해 보자
for i in range(0, len(x), batch_size):
자 한방에 해결이 된다. 모든 이미지 픽셀들을 배치대로 묶는 것이라고 볼 수 있다.
batch size가 100이므로 이렇게 볼 수 있다.
x[0:100]
x[100:200]
100장씩 묶어서 꺼내는 것이다.
p = np.argmax(y_batch, axis=1)
이런 식으로 배열 내 가장 높은 값 즉, 예측된 값을 꺼내는 함수라고 생각하면 된다.
이런 식으로 배치처리를 통해서 효율적으로 빠르게 많은 양의 데이터를 묶어서 학습시킬 수 있다
배치 처리의 장점
배치 처리는 이미지 1장당 처리 시간을 대폭 줄여준다.
일단 수치 계산 라이브러리 대부분이 큰 배열을 효율적으로 처리할 수 있도록 최적화되어 있다는 점이다.
컴퓨터에서는 큰 배열을 한꺼번에 계산하는 것이 분할된 작은 배열을 여러 번 계산하는 것보다 빠르다.
속도나 부하 측면에서도 배치처리를 진행하는 것이 이득이다.
반응형