본문 바로가기
DL|ML

케라스에서 fit(), fit_generator(), train_on_batch()의 차이점

by 이든Eden 2020. 6. 12.

이 글은 아래 링크를 번역한 및 추가한 글입니다.

https://stackoverflow.com/questions/49100556/what-is-the-use-of-train-on-batch-in-keras

Q : train_on_batch()와 fit()은 다른점이 무엇일까?

A : 이 질문에 대한 응답은, primary author(숄레 형아)가 대답한 간단한 답을 보면됩니다.

fit_generator로 당신은 validation data를 위한 generator를 만들 수 있다. 보통은, fit_generator를 사용하는 것을 추천하지만, train_on_batch도 잘 동작한다. 이 두개의 메소드는 서로 다른 케이스에 따라 사용되는 것 뿐, 더 "올바른" 메소드는 없다.

train_on_batch는 고정된 batch size를 신경쓰지 않고, 입력으로 준 콜렉션에 대한 weights를 명시적으로 업데이트하도록 해준다. 다음과 같은 케이스에 이 메소드를 쓰고 싶을 것이다: explicit한 데이터로 학습할 때. 이런 접근법을 기존의 학습 데이터 셋의 여러 개의 배치에서 iteration을 유지할 수 있지만, fit 혹은 fit_generator가 보통은 더 간단할 것이다.

 

train_on_batch를 사용하기 좋은 케이스는 pre-trained 모델을 단일 배치로 학습시켜야 할 때 이다. 이미 모델을 학습하고 deploy(배포)했으며, 나중에 이전에는 사용하지 않았던 새로운 학습 데이터 셋을 받았다고 가정해보자. train_on_batch는 이미 존재하는 모델에 바로바로 그 학습 데이터 셋을 학습시킬 수 있다. 다른 방법들도 사용할 수 있겠지만, train_on_batch가 이 경우에 가장 적합하다.

 

이와 같은 특별한 케이스 (다른 학습 배치에서 커서를 유지 관리해야 하는 교육학적 이유가 있거나, 특정 배치에 대한 semi-online을 해야하는 유형)이 아니라면, 이것은 항상 fit(모든 데이터를 메모리에 올려서 학습) 또는 fit_generator(generator를 사용해서 배치만큼만 메모리에 올려서 학습)를 사용하는 것보다 나을 것이다. 따라서 작은 데이터의 경우에는 fit을 사용해도 무방하지만 큰 데이터라면 fit_generator를 사용하여 대용량의 데이터를 효율적으로 학습하기에 좋다.