1. create_dataloaders ν¨μ
def create_dataloaders(train_files, val_files, image_size, mean, std, batch_size):
transform = ImageTransform(image_size, mean, std)
train_dataset = DogvsCatDataset(train_files, transform=transform, phase='train')
val_dataset = DogvsCatDataset(val_files, transform=transform, phase='val')
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_dataloader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)
dataloader_dict = {'train': train_dataloader, 'val': val_dataloader}
return dataloader_dictμν
- νμ΅(train)κ³Ό κ²μ¦(validation)μ© λ°μ΄ν°λ‘λλ₯Ό λμμ μμ±
- λ λ°μ΄ν°λ‘λλ₯Ό λμ λλ¦¬λ‘ λ¬Άμ΄μ λ°ν
λ¨κ³λ³ λμ
1λ¨κ³: Transform μμ±
transform = ImageTransform(image_size, mean, std)- μ΄λ―Έμ§ μ μ²λ¦¬λ₯Ό λ΄λΉνλ λ³νκΈ° κ°μ²΄ μμ±
image_size: μ΄λ―Έμ§ 리μ¬μ΄μ¦ ν¬κΈ° (μ: 224)mean,std: μ κ·νμ μ¬μ©ν νκ· κ³Ό νμ€νΈμ°¨ (μ: ImageNet ν΅κ³κ°)- train/val λͺ¨λ λμΌν λ³νκΈ° μ¬μ© (λ΄λΆμ μΌλ‘ phaseμ λ°λΌ λ€λ₯΄κ² λμ)
2λ¨κ³: Dataset μμ±
train_dataset = DogvsCatDataset(train_files, transform=transform, phase='train')
val_dataset = DogvsCatDataset(val_files, transform=transform, phase='val')Train Dataset:
train_files: νμ΅μ© μ΄λ―Έμ§ κ²½λ‘ λ¦¬μ€νΈphase='train': νμ΅ λͺ¨λ β Data Augmentation μ μ© (λλ€ ν¬λ‘, ν립 λ±)- λͺ©μ : λͺ¨λΈμ΄ λ€μν λ³ν μ΄λ―Έμ§λ‘ νμ΅νμ¬ μΌλ°ν μ±λ₯ ν₯μ Validation Dataset:
val_files: κ²μ¦μ© μ΄λ―Έμ§ κ²½λ‘ λ¦¬μ€νΈphase='val': κ²μ¦ λͺ¨λ β Augmentation μμ, μ€μ ν¬λ‘λ§ μ μ©- λͺ©μ : μΌκ΄λ 쑰건μμ λͺ¨λΈ μ±λ₯ νκ°
3λ¨κ³: DataLoader μμ±
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_dataloader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)Train DataLoader:
shuffle=True: λ§€ μν¬ν¬λ§λ€ λ°μ΄ν° μμλ₯Ό 무μμλ‘ μμ- λͺ¨λΈμ΄ λ°μ΄ν° μμλ₯Ό κΈ°μ΅νμ§ λͺ»νκ² ν¨
- νμ΅ μμ μ±κ³Ό μΌλ°ν μ±λ₯ ν₯μ Validation DataLoader:
shuffle=False: λ°μ΄ν° μμλ₯Ό κ·Έλλ‘ μ μ§- κ²μ¦μ νκ° λͺ©μ μ΄λ―λ‘ μμκ° μ±λ₯μ μν₯μ μ£Όλ©΄ μ λ¨
- μ¬ν κ°λ₯ν κ²°κ³Όλ₯Ό μ»κΈ° μν¨
4λ¨κ³: λμ λλ¦¬λ‘ λ°ν
dataloader_dict = {'train': train_dataloader, 'val': val_dataloader}
return dataloader_dict- λ λ°μ΄ν°λ‘λλ₯Ό νλμ λμ λλ¦¬λ‘ λ¬Άμ΄μ λ°ν
- νμ΅ λ£¨νμμ μ½κ² μ κ·Ό κ°λ₯ μ¬μ© μμ:
dataloaders = create_dataloaders(train_files, val_files, 224, mean, std, 32)
for epoch in range(10):
# νμ΅
for images, labels in dataloaders['train']:
...
# κ²μ¦
for images, labels in dataloaders['val']:
...2. get_test_dataloader ν¨μ
def get_test_dataloader(test_files, image_size, mean, std, batch_size=1):
transform = ImageTransform(image_size, mean, std)
test_dataset = DogvsCatDataset(test_files, transform=transform, phase='val')
test_dataloader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
return test_dataloaderμν
- ν μ€νΈ(μΆλ‘ )μ© λ°μ΄ν°λ‘λ μμ±
- νμ΅μ΄ μλ£λ λͺ¨λΈλ‘ μ΅μ’ μ±λ₯ νκ° μ μ¬μ©
λ¨κ³λ³ λμ
1λ¨κ³: Transform μμ±
transform = ImageTransform(image_size, mean, std)- κ²μ¦/ν μ€νΈμ© λ³νκΈ° μμ± (νμ΅ λμ λμΌν νλΌλ―Έν° μ¬μ©)
2λ¨κ³: Dataset μμ±
test_dataset = DogvsCatDataset(test_files, transform=transform, phase='val')phase='val': κ²μ¦ λͺ¨λλ‘ κ³ μ - μ΄μ : ν μ€νΈλ Augmentation μμ΄ μλ³Έμ κ°κΉμ΄ μνμμ νκ°ν΄μΌ 곡μ ν¨
- λλ€μ±μ΄ μμΌλ©΄ ν μ€νΈ κ²°κ³Όκ° λ§€λ² λ¬λΌμ§
3λ¨κ³: DataLoader μμ±
test_dataloader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)batch_size=1: κΈ°λ³Έκ° 1 (ν μ₯μ© μ²λ¦¬)- μΆλ‘ μμλ μλλ³΄λ€ μ νν κ°λ³ μμΈ‘μ΄ μ€μ
- νμνλ©΄ λ ν° λ°°μΉ μ¬μ΄μ¦ μ§μ κ°λ₯
shuffle=False: μμ μ μ§- ν μ€νΈ κ²°κ³Όλ₯Ό νμΌ μμλλ‘ μ μ₯νκ±°λ λΉκ΅ν λ μ μ©
μ£Όμ μ°¨μ΄μ λΉκ΅
| κ΅¬λΆ | Train | Validation | Test |
|---|---|---|---|
| Augmentation | μ μ© | λ―Έμ μ© | λ―Έμ μ© |
| shuffle | True | False | False |
| batch_size | νΌ (32, 64 λ±) | νΌ (32, 64 λ±) | μμ (1~16) |
| λͺ©μ | λͺ¨λΈ νμ΅ | κ³Όμ ν© μ²΄ν¬ | μ΅μ’ μ±λ₯ νκ° |
| μ¬μ© μμ | λ§€ μν¬ν¬ | λ§€ μν¬ν¬ | νμ΅ μλ£ ν |
μ 체 λ°μ΄ν° νμ΄νλΌμΈ νλ¦
1. λ°μ΄ν° λΆν
ββ train_files, val_files, test_files
2. DataLoader μμ±
ββ create_dataloaders()
β ββ train_dataloader (shuffle=True, augmentation=ON)
β ββ val_dataloader (shuffle=False, augmentation=OFF)
β
ββ get_test_dataloader()
ββ test_dataloader (shuffle=False, augmentation=OFF, batch=1)
3. νμ΅ λ£¨ν
for epoch in epochs:
ββ train: train_dataloader μ¬μ©
ββ validate: val_dataloader μ¬μ©
4. μ΅μ’
νκ°
ββ test: test_dataloader μ¬μ©
ν΅μ¬ ν¬μΈνΈ
1. Phase ꡬλΆμ μ€μμ±
phase='train': λ°μ΄ν° μ¦κ°μΌλ‘ λ€μμ± ν보phase='val': μ¦κ° μμ΄ μΌκ΄λ νκ°
2. Shuffle μ λ΅
- Train:
Trueβ νμ΅ μμ μ± - Val/Test:
Falseβ μ¬νμ±
3. Batch Size
- Train/Val: ν° λ°°μΉλ‘ ν¨μ¨μ νμ΅
- Test: μμ λ°°μΉλ‘ μ νν μΆλ‘