Model sifatining yarmi — ma’lumot tayyorlashda. Bu modul PyTorch’ning ma’lumot uzatish quvuri (Dataset → DataLoader) va tibbiy tasvirlar uchun MONAI kutubxonasini qamraydi.
Dataset va DataLoader
PyTorch’da ma’lumot ikki bosqichda uzatiladi. Dataset — "nechta misol bor va i-chisini qanday olish kerak" degan savollarga javob beradigan obyekt; DataLoader esa uni batch’larga bo’lib, aralashtirib, parallel oqimlarda modelga uzatadi:
from torch.utils.data import Dataset, DataLoader
class MiniDataset(Dataset):
def __init__(self, X, y):
self.X, self.y = X, y
def __len__(self):
return len(self.X)
def __getitem__(self, i):
return self.X[i], self.y[i]
loader = DataLoader(MiniDataset(X, y), batch_size=32, shuffle=True)
for xb, yb in loader:
... # har iteratsiyada 32 talik batch
Nega batch? Butun datasetni birdaniga GPU’ga sig’dirib bo’lmaydi, bittalab berish esa sekin va gradientlari shovqinli — batch (odatda 16–256) ikkisining o’rtasidagi oltin nuqta. shuffle=True faqat train to’plamida kerak: model misollar tartibini "yodlab" olmasligi uchun; validatsiyada aralashtirishning hojati yo’q.
Transform va normalizatsiya
Xom ma’lumot modelga berishdan oldin transformlardan o’tadi: o’lchamni birxillashtirish, tensorga o’girish va normalizatsiya — qiymatlarni kichik, o’rtachasi nolga yaqin oraliqqa keltirish. Normalizatsiyasiz katta qiymatli xususiyatlar gradientlarni "bosib ketadi" va o’qitish beqaror bo’ladi.
Train to’plamiga yana augmentatsiya qo’shiladi — tasodifiy burish, aylantirish, kesish: har epoch’da model rasmning biroz boshqacha variantini ko’radi, bu overfitting’ni kamaytiradi. Muhim qoida: augmentatsiya faqat train’da; validatsiya/test har doim "toza" o’tadi.
Train / validation / test
| To’plam | Vazifasi | Model uni "ko’radimi" |
|---|---|---|
| Train | og’irliklarni o’qitish | ha, har epoch |
| Validation | sozlamalarni tanlash, overfitting’ni kuzatish | faqat baholashda |
| Test | yakuniy, bir martalik baho | eng oxirida, bir marta |
Klassik xato — normalizatsiya statistikasini (o’rtacha, og’ish) butun datasetdan hisoblash: test ma’lumoti train’ga "sizib" kiradi (data leakage). Statistika faqat train’dan olinadi va o’sha ko’rinishda qolganlarga qo’llanadi.
MONAI: tibbiy tasvirlar
MONAI — PyTorch ustiga qurilgan, tibbiy tasvirlar (KT, MRT, rentgen) uchun maxsus kutubxona. Tibbiy formatlar oddiy PNG emas: NIfTI/DICOM fayllari 3D hajmli, voksel o’lchamlari (spacing) har xil, intensivlik shkalalari asbobga bog’liq. MONAI shunga mos tayyor transformlar beradi:
from monai.transforms import (Compose, LoadImage, EnsureChannelFirst,
ScaleIntensity, Resize)
pipe = Compose([
LoadImage(image_only=True), # NIfTI/DICOM ni o'qiydi
EnsureChannelFirst(), # (H, W, D) -> (1, H, W, D)
ScaleIntensity(), # intensivlikni 0..1 ga
Resize((96, 96, 96)), # yagona o'lchamga
])
G’oya tanish: bu ham Dataset + transform quvuri, faqat domenga moslashgan. Umumiy tamoyilni bilsangiz, yangi soha kutubxonasi — shunchaki yangi transform to’plami.
Amaliyot
- 100 misolli sun’iy (X, y) yasab,
MiniDataset+DataLoaderdanbatch_size=16bilan nechta batch chiqishini oldindan aytib, keyin sanab tekshiring. shuffle=TruevaFalsebilan birinchi batch’ni ikki marta chiqarib, farqni ko’rsating.- Ixtiyoriy son massivini qo’lda normalizatsiya qiling:
(x - mean) / std; natijaning o’rtachasi ≈ 0, og’ishi ≈ 1 ekanini tekshiring. - Nega augmentatsiya validatsiyada qo’llanmasligini 2–3 jumlada yozing.
- Data leakage’ga o’zingizning misolingizni o’ylab toping (maslahat: vaqt qatorlari yoki bir bemorning bir nechta sur’ati).
Modul testi keyingi darsda.