Veri Biliminde Reproducibility: Seed Ayarı Neden Yetmiyor
# Veri Biliminde Reproducibility: Seed Ayarı Neden Yetmiyor
Machine learning projelerinde aynı kodu iki kez çalıştırdığında farklı sonuçlar alırsın. Çoğu kişi `random.seed()` veya `np.random.seed()` ayarladığını düşünerek rahatlar. Ancak bu yetmiyor. Seed ayarı sadece Python'un temel random modülünü kontrol eder. TensorFlow, PyTorch, NumPy'nin farklı bileşenleri kendi random state'lerine sahiptir.
1. Birden fazla random kaynağı: NumPy, TensorFlow, PyTorch, Python'un random modülü bağımsız random generatörlere sahiptir.
2. GPU randomlığı: TensorFlow ve PyTorch GPU'da çalışırken kendi seed'lerini kullanır.
3. Parallel işlemler: Multiprocessing veya threading kullanırsan, her process'in kendi seed'i gerekir.
4. Sistem kaynakları: Bellek, CPU yükü değişirse hesaplama sırası değişebilir.
Adım 1: Python random modülü
1import random2random.seed(42)Adım 2: NumPy
1import numpy as np2np.random.seed(42)Adım 3: TensorFlow (varsa)
1import tensorflow as tf2tf.random.set_seed(42)Adım 4: PyTorch (varsa)
1import torch2torch.manual_seed(42)3if torch.cuda.is_available():4torch.cuda.manual_seed(42)5torch.cuda.manual_seed_all(42)Adım 5: Deterministic mode (PyTorch)
1torch.backends.cudnn.deterministic = True2torch.backends.cudnn.benchmark = False1import numpy as np2from sklearn.model_selection import train_test_split3from sklearn.ensemble import RandomForestClassifier45def set_all_seeds(seed=42):6random.seed(seed)7np.random.seed(seed)8# TensorFlow varsa: tf.random.set_seed(seed)910# Veri oluştur11X = np.random.randn(100, 5)12y = np.random.randint(0, 2, 100)1314# İlk çalıştırma15set_all_seeds(42)16X_train1, X_test1, y_train1, y_test1 = train_test_split(X, y, test_size=0.2)17model1 = RandomForestClassifier(random_state=42)18model1.fit(X_train1, y_train1)19score1 = model1.score(X_test1, y_test1)2021# İkinci çalıştırma22set_all_seeds(42)23X_train2, X_test2, y_train2, y_test2 = train_test_split(X, y, test_size=0.2)24model2 = RandomForestClassifier(random_state=42)25model2.fit(X_train2, y_train2)26score2 = model2.score(X_test2, y_test2)2728print(f"Score 1: {score1}")29print(f"Score 2: {score2}")30print(f"Aynı mı? {score1 == score2}")3132# Çıktı:33# Score 1: 0.7534# Score 2: 0.7535# Aynı mı? True- Her kütüphanenin model/algoritmasında da `random_state` parametresi ayarla.
- GPU kullanıyorsan `torch.backends.cudnn.deterministic = True` mutlaka ekle.
- Multiprocessing varsa, her worker'a ayrı seed ver.
- Reproducibility için tüm seed'leri bir fonksiyonda topla ve script başında çağır.
Bu şekilde aynı kodu çalıştırdığında her seferinde tamamen aynı sonuçlar alırsın.
0 yorum