C.W.K.
Stream
Lesson 03 of 06 · published

Data pipeline 옵션

~8 min · data

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

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 가 만들어지는 곳에서 정해.

Code

같은 fit() 이 모든 입력 포맷을 받음·python
# All of these work with model.fit():
model.fit(numpy_x, numpy_y)              # NumPy arrays
model.fit(tf_dataset)                     # tf.data.Dataset
model.fit(torch_dataloader)               # PyTorch DataLoader
model.fit(keras_pydataset)                # keras.utils.PyDataset

External links

Exercise

CIFAR-10 을 tf.data.Dataset 에 wrap (batch + shuffle + prefetch). 학습. 그다음 torch.utils.data.DataLoader 로 재구현 (KERAS_BACKEND=torch). epoch 시간 비교.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.