fit() 하나가 온갖 입력 타입을 다 받아
Keras 3 의 조용한 초능력 — model.fit() 은 데이터가 *어떻게* 포장됐는지 신경 안 써. 똑같은 학습 호출이 NumPy array, tf.data.Dataset, PyTorch DataLoader, keras.utils.PyDataset, Pandas DataFrame 다 받아 — 아무 backend 에서나. 이 decoupling 덕에 밑의 data layer 를 갈아끼우면서도 model 코드는 그대로 둘 수 있어.
고르는 기준
다 RAM 에 들어가면 NumPy 가 정답 — 가장 단순하고 더 복잡하게 만들 이유가 없어. 데이터가 메모리를 넘기거나 streaming, on-the-fly 변환, shuffle, prefetch 가 필요해지는 순간 진짜 pipeline 으로. tf.data 가 가장 성숙하고 기능 완비 — multi-thread / prefetch / shuffle 다 native. torch.DataLoader 는 PyTorch backend 에서 idiomatic (num_workers 로 multi-process loading). keras.utils.PyDataset 는 내가 처음부터 끝까지 제어하는 custom generator 용 framework-중립 탈출구. JAX 엔 grain 이 native data API.
모두가 한 번씩 당하는 함정
이미 batch 된 dataset (iterable 한 거 — tf.data, DataLoader, PyDataset) 을 넘기면 fit() 의 batch_size 인자는 무시돼. dataset 이 이미 자기 batch size 를 정했으니까. DataLoader(batch_size=64) 만들어 놓고 fit(..., batch_size=32) 넘긴 다음 왜 batch 가 64 냐고 헷갈려 하는 사람 많아. dataset 이 이겨 — batch size 는 실제 batch 가 만들어지는 곳에서 정해.