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 random
2random.seed(42)

Adım 2: NumPy

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import numpy as np
2np.random.seed(42)

Adım 3: TensorFlow (varsa)

1import tensorflow as tf
2tf.random.set_seed(42)

Adım 4: PyTorch (varsa)

1import torch
2torch.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 = True
2torch.backends.cudnn.benchmark = False
1import numpy as np
2from sklearn.model_selection import train_test_split
3from sklearn.ensemble import RandomForestClassifier
4
5def set_all_seeds(seed=42):
6random.seed(seed)
7np.random.seed(seed)
8# TensorFlow varsa: tf.random.set_seed(seed)
9
10# Veri oluştur
11X = np.random.randn(100, 5)
12y = np.random.randint(0, 2, 100)
13
14# İlk çalıştırma
15set_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)
20
21# İkinci çalıştırma
22set_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)
27
28print(f"Score 1: {score1}")
29print(f"Score 2: {score2}")
30print(f"Aynı mı? {score1 == score2}")
31
32# Çıktı:
33# Score 1: 0.75
34# Score 2: 0.75
35# 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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz