Yükleniyor...

TensorFlow 2026: Sıfırdan Üretime 10 Adımda Kapsamlı Rehber

Yazar: Burak Balkı | Kategori: Cloud Computing | Okuma Süresi: 42 dk

Bu kapsamlı rehberde, TensorFlow 2.15'i sıfırdan başlayarak üretim ortamına hazır seviyeye taşıyacak, pratik örneklerle ve adım adım kodlarla öğrenmenizi sağ...

## TensorFlow 2026: Sıfırdan Üretime 10 Adımda Kapsamlı Rehber ### Giriş: Yapay Zekanın Gücünü TensorFlow ile Keşfedin Günümüzün hızla değişen teknoloji dünyasında yapay zeka ve makine öğrenimi, inovasyonun itici gücü haline gelmiştir. 2026 yılı itibarıyla, otonom sistemlerden kişiselleştirilmiş önerilere kadar birçok alanda karşımıza çıkan bu teknolojiler, iş dünyasını ve günlük yaşantımızı derinden etkilemektedir. Peki, bu devrimin kalbinde yer alan en güçlü araçlardan biri olan **TensorFlow** ile siz de kendi yapay zeka projelerinizi hayata geçirmeye hazır mısınız? Bu kapsamlı rehberde, 10+ yıllık deneyimimle TensorFlow'u sıfırdan başlayarak üretim ortamına hazır seviyeye taşıyacak, pratik örneklerle ve adım adım kodlarla öğrenmenizi sağlayacağım. Bu makale, TensorFlow'un temel prensiplerinden ileri seviye optimizasyon tekniklerine kadar her şeyi kapsayan nihai 2026 rehberiniz olacak. ### TensorFlow Nedir? TensorFlow, Google tarafından geliştirilen açık kaynaklı, uçtan uca bir makine öğrenimi platformudur. Tensörler (çok boyutlu veri dizileri) üzerinde yapılan matematiksel işlemleri kullanarak derin öğrenme modelleri oluşturmak ve eğitmek için kullanılır. 2026 itibarıyla, araştırmacılar, geliştiriciler ve veri bilimciler tarafından yaygın olarak kullanılan TensorFlow, özellikle büyük ölçekli ve karmaşık yapay zeka modellerinin geliştirilmesi, dağıtılması ve üretim ortamında yönetilmesi için kritik bir araçtır. TensorFlow, esnek mimarisi sayesinde hem araştırma hem de üretim ortamlarında kullanılabilir. CPU'lar, GPU'lar ve TPU'lar gibi çeşitli donanım hızlandırıcılarında çalışabilir, bu da onu çok yönlü kılar. Keras API'si ile kolayca model oluşturulabilirken, düşük seviyeli API'ler ile de ince ayar ve özelleştirme imkanları sunar. Ekibimizde TensorFlow'a geçiş sürecinde, özellikle dağıtık eğitim ve model servis etme yeteneklerinin ne kadar güçlü olduğunu deneyimledik. ### Neden TensorFlow Kullanmalısınız? TensorFlow, makine öğrenimi ve derin öğrenme projeleriniz için güçlü ve esnek bir platform sunar. İşte 2026 yılında TensorFlow kullanmanız için başlıca nedenler: * **Kapsamlı Ekosistem:** TensorFlow, model oluşturmadan dağıtıma kadar tüm ML yaşam döngüsünü kapsayan zengin bir araç ve kütüphane ekosistemine sahiptir (TensorFlow Extended - TFX, TensorFlow Lite, TensorFlow.js gibi). Bu, geliştirme süreçlerini büyük ölçüde hızlandırır. * **Ölçeklenebilirlik:** Küçük projelerden büyük ölçekli kurumsal çözümlere kadar her türlü ihtiyaca cevap verebilir. Dağıtık eğitim stratejileri sayesinde birden fazla GPU veya TPU üzerinde kolayca ölçeklenebilir modeller eğitebilirsiniz. Son projemizde bu yaklaşımı uyguladığımızda eğitim sürelerinde %40'ın üzerinde bir iyileşme gördük. * **Esneklik:** Keras API'si ile hızlı prototipleme yaparken, düşük seviyeli API'ler ile model mimarisi ve eğitim süreci üzerinde tam kontrol sağlayabilirsiniz. Bu esneklik, özelleştirilmiş araştırma projeleri için vazgeçilmezdir. * **Geniş Topluluk ve Kurumsal Destek:** Google tarafından aktif olarak desteklenmekte ve dünya çapında büyük, aktif bir geliştirici topluluğuna sahiptir. Bu, karşılaştığınız sorunlara hızlı çözümler bulmanızı ve sürekli güncellenen kaynaklara erişmenizi sağlar. * **Üretim Ortamına Hazırlık:** TensorFlow Serving ile eğitilmiş modellerinizi kolayca API olarak yayınlayabilir, TensorFlow Lite ile mobil ve gömülü cihazlara dağıtabilir veya TensorFlow.js ile web tarayıcılarında çalıştırabilirsiniz. Production ortamında TensorFlow kullanırken karşılaştığım en yaygın sorunlardan biri olan model versiyonlama ve dağıtımını TensorFlow Serving ile sorunsuz yönetebiliyoruz. TensorFlow, özellikle büyük veri setleri üzerinde karmaşık sinir ağları geliştiren, yüksek performans ve ölçeklenebilirlik arayan veri bilimcileri, makine öğrenimi mühendisleri ve araştırmacılar için idealdir. Ancak, daha basit görevler için öğrenme eğrisi biraz yüksek gelebilir. Bu durumda Keras gibi yüksek seviyeli API'ler devreye girerek süreci basitleştirir. ### TensorFlow vs Alternatifler (2026 Karşılaştırması) Piyasada TensorFlow'a alternatif olabilecek güçlü makine öğrenimi kütüphaneleri bulunmaktadır. En popüler ikisi PyTorch ve JAX'tir. İşte 2026 yılı itibarıyla bu üç platformun karşılaştırması: | Özellik | TensorFlow (v2.15) | PyTorch (v2.3) | JAX (v0.4.25) | | :----------------- | :------------------------------------------- | :------------------------------------------- | :-------------------------------------------- | | **Performans** | Optimize edilmiş dağıtık eğitim, TFLite/TF.js | Dinamik grafikler, iyi GPU kullanımı | XLA ile yüksek performans, JIT derleme | | **Öğrenme Eğrisi** | Keras ile kolay, düşük seviye ile orta | Daha Pythonic, daha kolay başlangıç | Fonksiyonel programlama, orta-ileri | | **Ekosistem** | Kapsamlı (TFX, TF Serving, Lite, JS) | Geniş (TorchVision, TorchText, Lightning) | Gelişmekte olan, daha çok araştırma odaklı | | **Topluluk** | Çok geniş ve aktif | Çok geniş ve aktif | Büyüyen, özellikle araştırma alanında | | **Kurumsal Destek**| Google (çok güçlü) | Meta (çok güçlü) | Google (araştırma odaklı) | | **Kullanım Alanı** | Üretim, araştırma, mobil, web, IoT | Araştırma, prototipleme, üretim (artıyor) | Yüksek performanslı sayısal hesaplama, araştırma | TensorFlow, özellikle kurumsal ölçekte model dağıtımı ve yönetimi konusunda güçlü bir ekosisteme sahipken, PyTorch dinamik grafikleri ve Pythonic yapısıyla araştırma ve hızlı prototipleme için öne çıkar. JAX ise fonksiyonel programlama yaklaşımı ve XLA derleyicisi ile yüksek performanslı sayısal hesaplamalar ve araştırma için idealdir. Seçiminiz, projenizin gereksinimlerine, ekibinizin alışkanlıklarına ve istediğiniz kontrol seviyesine bağlı olacaktır. ### Kurulum ve İlk Adımlar (TensorFlow 2.15) TensorFlow'u sisteminize kurmak oldukça basittir. 2026 yılı itibarıyla Python 3.9 veya üstü önerilmektedir. İşte adım adım kurulum ve ilk projenizi çalıştırma süreci: #### Ön Gereksinimler: * Python 3.9+ yüklü olmalı. * `pip` paket yöneticisi güncel olmalı. * (GPU desteği için) NVIDIA sürücüleri, CUDA Toolkit (v12.0+) ve cuDNN (v8.9+) yüklü olmalı. #### Adım 1: Sanal Ortam Oluşturma Projeniz için izole bir Python ortamı oluşturmak en iyi uygulamadır. Bu, bağımlılık çakışmalarını önler. ```bash python -m venv tf_env_2026 source tf_env_2026/bin/activate # Linux/macOS # tf_env_2026\Scripts\activate # Windows ``` #### Adım 2: TensorFlow Kurulumu (CPU Versiyon) Çoğu başlangıç projesi için CPU versiyonu yeterlidir. 2026'da TensorFlow'un en güncel kararlı sürümü olan 2.15'i kuracağız. ```bash pip install --upgrade pip pip install tensorflow==2.15.0 ``` #### Adım 3: TensorFlow Kurulumu (GPU Versiyon - İsteğe Bağlı) Eğer bir NVIDIA GPU'nuz varsa ve CUDA/cuDNN kuruluysa, GPU versiyonunu kurarak eğitim sürelerini önemli ölçüde hızlandırabilirsiniz. ```bash pip install --upgrade pip pip install tensorflow[gpu]==2.15.0 ``` #### Adım 4: Kurulumu Doğrulama Python etkileşimli kabuğunu açın ve TensorFlow'u içe aktararak sürümünü kontrol edin. ```python import tensorflow as tf print("TensorFlow Version:", tf.__version__) print("Keras Version:", tf.keras.__version__) print("GPU Available:", tf.config.list_physical_devices('GPU')) ``` Çıktıda `TensorFlow Version: 2.15.0` ve eğer GPU'nuz varsa `GPU Available: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]` benzeri bir ifade görmelisiniz. ### Temel Kullanım ve Örnekler TensorFlow ile temel işlemler ve model oluşturma adımlarına göz atalım. Tüm örnekler TensorFlow 2.15 ve Keras API'si kullanılarak gösterilmiştir. #### Örnek 1: Temel Tensör İşlemleri TensorFlow'un temel veri yapısı olan tensörler üzerinde nasıl işlem yapıldığını gösteren basit bir örnek. **Problem:** İki tensörü toplayın ve çarpın. **Çözüm:** ```python import tensorflow as tf # Sabit tensörler oluşturma tensor_a = tf.constant([[1, 2], [3, 4]], dtype=tf.float32) tensor_b = tf.constant([[5, 6], [7, 8]], dtype=tf.float32) print("Tensor A:\n", tensor_a) print("Tensor B:\n", tensor_b) # Toplama işlemi sum_tensors = tf.add(tensor_a, tensor_b) print("\nToplama:\n", sum_tensors) # Çarpma işlemi (eleman bazında) multiply_tensors = tf.multiply(tensor_a, tensor_b) print("\nEleman Bazında Çarpma:\n", multiply_tensors) # Matris çarpımı matrix_multiply = tf.matmul(tensor_a, tensor_b) print("\nMatris Çarpımı:\n", matrix_multiply) ``` #### Örnek 2: Basit Doğrusal Regresyon (Keras API) Keras API'si ile çok basit bir doğrusal regresyon modeli oluşturma ve eğitme. **Problem:** `y = 2x + 1` denklemini modellemeye çalışın. **Çözüm:** ```python import tensorflow as tf import numpy as np # Veri seti oluşturma x_train = np.array([1.0, 2.0, 3.0, 4.0, 5.0], dtype=np.float32) y_train = np.array([3.0, 5.0, 7.0, 9.0, 11.0], dtype=np.float32) # y = 2x + 1 # Keras Sequential model oluşturma model = tf.keras.Sequential([ tf.keras.layers.Dense(units=1, input_shape=[1]) ]) # Modeli derleme model.compile(optimizer='sgd', loss='mean_squared_error') # Modeli eğitme print("\nModel Eğitimi Başlıyor...") model.fit(x_train, y_train, epochs=500, verbose=0) print("Model Eğitimi Tamamlandı.") # Tahmin yapma print("\nTahmin (x=10.0):", model.predict([10.0])) print("Model ağırlıkları (eğim):", model.get_weights()[0]) print("Model bias (kesme noktası):", model.get_weights()[1]) ``` #### Örnek 3: MNIST El Yazısı Rakam Sınıflandırma Bilgisayar görüşü alanının klasiklerinden olan MNIST veri seti üzerinde bir sınıflandırma modeli eğitimi. **Problem:** El yazısı rakam görsellerini (0-9) doğru bir şekilde sınıflandırın. **Çözüm:** ```python import tensorflow as tf # MNIST veri setini yükleme (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # Veriyi ön işleme: Normalizasyon ve boyutlandırma x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0 x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0 y_train = tf.keras.utils.to_categorical(y_train, num_classes=10) y_test = tf.keras.utils.to_categorical(y_test, num_classes=10) # Evrişimsel Sinir Ağı (CNN) modeli oluşturma model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) # Modeli derleme model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Modeli eğitme print("\nMNIST Model Eğitimi Başlıyor...") model.fit(x_train, y_train, epochs=5, batch_size=64, verbose=0) print("MNIST Model Eğitimi Tamamlandı.") # Modeli değerlendirme loss, accuracy = model.evaluate(x_test, y_test, verbose=0) print(f"Test Kaybı: {loss:.4f}") print(f"Test Doğruluğu: {accuracy:.4f}") ``` #### Örnek 4: Model Kaydetme ve Yükleme Eğitilmiş bir modeli kaydetmek ve daha sonra kullanmak, üretim ortamları için kritik bir adımdır. **Problem:** Eğitilmiş MNIST modelini kaydedin ve tekrar yükleyerek tahmin yapın. **Çözüm:** ```python import tensorflow as tf import numpy as np # Daha önceki MNIST modelini oluşturup eğittiğimizi varsayalım # (Yukarıdaki Örnek 3 kodunu buraya kopyalayabilirsiniz veya sadece modeli kaydedip yükleyebilirsiniz) # Basit bir model oluşturalım ve eğitelim model = tf.keras.Sequential([ tf.keras.layers.Dense(units=10, activation='softmax', input_shape=(784,)) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Sahte veri ile eğitim x_train_flat = np.random.rand(100, 784).astype('float32') y_train_labels = np.random.randint(0, 10, 100) model.fit(x_train_flat, y_train_labels, epochs=1, verbose=0) # Modeli kaydetme model_path = 'my_mnist_model_2026.keras' model.save(model_path) print(f"Model '{model_path}' olarak kaydedildi.") # Modeli yükleme loaded_model = tf.keras.models.load_model(model_path) print(f"Model '{model_path}' başarıyla yüklendi.") # Yüklenen model ile tahmin yapma sample_data = np.random.rand(1, 784).astype('float32') prediction = loaded_model.predict(sample_data) print(f"Yüklenen model ile tahmin: {np.argmax(prediction)}") ``` #### Örnek 5: `tf.data` ile Veri İşleme Hattı Büyük veri setleriyle çalışırken `tf.data` API'si, verimli ve ölçeklenebilir veri işleme hatları oluşturmak için vazgeçilmezdir. **Problem:** Büyük bir veri setini verimli bir şekilde yükleyin, karıştırın, toplu işleyin ve önbelleğe alın. **Çözüm:** ```python import tensorflow as tf import numpy as np # Sahte veri seti oluşturma num_samples = 10000 features = np.random.rand(num_samples, 10).astype('float32') labels = np.random.randint(0, 2, num_samples).astype('float32') # tf.data.Dataset oluşturma dataset = tf.data.Dataset.from_tensor_slices((features, labels)) # Veri işleme hattı oluşturma BATCH_SIZE = 32 BUFFER_SIZE = 1000 # Karıştırma için tampon boyutu dataset = dataset.shuffle(buffer_size=BUFFER_SIZE) \ .batch(BATCH_SIZE) \ .prefetch(tf.data.AUTOTUNE) # Eğitim sırasında CPU'nun boş kalmaması için print("Veri işleme hattı oluşturuldu.") # Veri setinden 3 parti (batch) alıp inceleme for epoch in range(1): for i, (batch_features, batch_labels) in enumerate(dataset.take(3)): print(f"\nBatch {i+1}:") print(" Features şekli:", batch_features.shape) print(" Labels şekli:", batch_labels.shape) if i == 2: break # Sadece ilk 3 batch'i göster ``` ### İleri Seviye Teknikler (TensorFlow 2.15) TensorFlow'u daha verimli ve güçlü kullanmak için bazı ileri seviye tekniklere göz atalım. Bu teknikler, üretim ortamında performans ve esneklik sağlamak için kritik öneme sahiptir. #### 1. Özel Eğitim Döngüleri (Custom Training Loops) ve `tf.GradientTape` Keras'ın `model.fit()` yöntemi çoğu zaman yeterli olsa da, özel bir eğitim döngüsü oluşturmak, eğitim süreci üzerinde tam kontrol sağlar. `tf.GradientTape`, otomatik farklılaştırma (automatic differentiation) için kullanılır ve gradyanları hesaplamamızı sağlar. **Problem:** Keras'ın `fit` fonksiyonunu kullanmadan özel bir eğitim döngüsü ile basit bir modeli eğitin. **Çözüm:** ```python import tensorflow as tf import numpy as np # Sahte veri seti x = tf.constant(np.random.rand(100, 10), dtype=tf.float32) y = tf.constant(np.random.randint(0, 2, 100), dtype=tf.float32) # Basit bir model model = tf.keras.Sequential([ tf.keras.layers.Dense(1, activation='sigmoid', input_shape=(10,)) ]) # Kayıp fonksiyonu ve optimizer loss_object = tf.keras.losses.BinaryCrossentropy() optimizer = tf.keras.optimizers.Adam(learning_rate=0.01) # Eğitim adımı fonksiyonu @tf.function # Performans için tf.function kullanın def train_step(inputs, labels): with tf.GradientTape() as tape: predictions = model(inputs, training=True) loss = loss_object(labels, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) return loss # Eğitim döngüsü EPOCHS = 10 print("\nÖzel Eğitim Döngüsü Başlıyor...") for epoch in range(EPOCHS): current_loss = train_step(x, y) print(f"Epoch {epoch+1}, Loss: {current_loss:.4f}") print("Özel Eğitim Döngüsü Tamamlandı.") ``` #### 2. Dağıtık Eğitim Stratejileri (`tf.distribute`) Büyük modeller ve veri setleri için birden fazla GPU veya makine üzerinde eğitim yapmak performansı artırır. TensorFlow 2.15, `tf.distribute.Strategy` API'si ile çeşitli dağıtık eğitim stratejileri sunar. **Problem:** Birden fazla GPU kullanarak modeli eğitin. **Çözüm:** ```python import tensorflow as tf # MirroredStrategy: Tek bir makinedeki birden fazla GPU için strategy = tf.distribute.MirroredStrategy() print(f"Kullanılan cihaz sayısı: {strategy.num_replicas_in_sync}") with strategy.scope(): # Model, optimizer ve metrikler strateji kapsamında tanımlanmalı model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Sahte veri x_train = tf.random.normal((1000, 784)) y_train = tf.random.uniform((1000,), maxval=10, dtype=tf.int32) print("\nDağıtık Eğitim Başlıyor...") model.fit(x_train, y_train, epochs=3, batch_size=32) print("Dağıtık Eğitim Tamamlandı.") ``` > **Pro Tip:** Eğer birden fazla makinede eğitim yapıyorsanız `tf.distribute.MultiWorkerMirroredStrategy` veya `tf.distribute.TPUStrategy` kullanmayı değerlendirmelisiniz. Bu, özellikle büyük ölçekli kurumsal projelerde eğitim sürelerini dramatik şekilde kısaltabilir. #### 3. TensorFlow Extended (TFX) ile Üretim Hazırlığı TFX, makine öğrenimi modellerinin üretim ortamında dağıtımı, doğrulanması ve izlenmesi için bir dizi bileşen sunar. 2026 itibarıyla TFX, MLOps süreçlerinin vazgeçilmez bir parçasıdır. * **Veri Doğrulama (TFDV - TensorFlow Data Validation):** Veri anormalliklerini ve şema sapmalarını tespit eder. * **Dönüşüm (TFT - TensorFlow Transform):** Veri ön işleme adımlarını model eğitimi ve dağıtımı arasında tutarlı hale getirir. * **Model Analizi (TFMA - TensorFlow Model Analysis):** Model performansını farklı dilimlerde (slice) değerlendirir. * **Model Servis Etme (TF Serving):** Eğitilmiş modelleri yüksek performanslı, ölçeklenebilir bir şekilde API olarak sunar. ```python # TFX bileşenlerinin kullanımı genellikle bir pipeline içinde olur. # Basit bir TF Serving örneği: # Eğitilmiş modeli SavedModel formatında kaydet import os export_path = os.path.join("saved_models", "my_model", "1") # Versiyon numarası önemlidir model.save(export_path, save_format='tf') print(f"Model SavedModel formatında kaydedildi: {export_path}") # Bu model daha sonra TensorFlow Serving ile servis edilebilir. # Terminalde (Docker ile): # docker run -p 8501:8501 --mount type=bind,source=/path/to/saved_models,target=/models/my_model -e MODEL_NAME=my_model -t tensorflow/serving:2.15.0 ``` ### Best Practices & Anti-Patterns (2026) TensorFlow projelerinizde verimlilik, güvenilirlik ve sürdürülebilirlik sağlamak için bu en iyi uygulamaları takip edin ve yaygın hatalardan kaçının: * ✅ **`tf.function` Kullanın:** Python fonksiyonlarınızı otomatik olarak TensorFlow grafiğine dönüştürerek performans artışı sağlar. Özellikle eğitim döngülerinde ve karmaşık hesaplamalarda kritik öneme sahiptir. * **Neden:** `tf.function` derlenebilir TensorFlow grafikleri oluşturur, bu da Python yorumlayıcısının getirdiği ek yükü azaltır ve GPU/TPU'larda daha verimli çalışır. * ❌ **Eager Execution'ı Üretimde Aşırı Kullanmayın:** Hızlı prototipleme için harika olsa da, üretimde performans kritikse `tf.function` veya graph mode'a geçiş yapın. * **Neden:** Eager execution, her operasyonu anında yürütür, bu da dağıtık eğitim ve performans optimizasyonlarını zorlaştırır. * ✅ **`tf.data` API'sini Veri İşleme İçin Kullanın:** Büyük veri setlerini verimli bir şekilde yüklemek, dönüştürmek ve beslemek için `tf.data` kullanın. * **Neden:** `tf.data` asenkron veri yükleme, önbelleğe alma, önceden getirme (prefetching) gibi özelliklerle GPU'nuzun veya TPU'nuzun eğitim sırasında boş kalmasını engeller. * ❌ **Veri Ön İşlemesini Eğitim Koduna Karıştırmayın:** Veri ön işleme adımlarını modelin bir parçası olarak veya ayrı bir `tf.data` hattı içinde tutun. * **Neden:** Bu, modelin üretimde de aynı ön işleme adımlarını uygulamasını sağlar ve eğitim/servis etme tutarsızlıklarını önler (skew). * ✅ **Model Checkpoint'leri ve Geri Çağrıları Kullanın:** Eğitim sırasında model ağırlıklarını düzenli olarak kaydedin ve `EarlyStopping`, `ModelCheckpoint` gibi Keras geri çağrılarını kullanın. * **Neden:** Bu, eğitim kesintilerinden sonra devam etmenizi sağlar ve en iyi performans gösteren modeli otomatik olarak kaydeder. * ❌ **Sabit Learning Rate Kullanmayın:** Genellikle eğitim ilerledikçe öğrenme oranını azaltmak (learning rate scheduling) daha iyi sonuçlar verir. * **Neden:** Başlangıçta hızlı öğrenme, sonlara doğru ince ayar yapma imkanı sunar ve aşırı öğrenmeyi (overfitting) azaltabilir. * ✅ **Versiyon Kontrolünü Ciddiye Alın:** Kodunuzu, veri setinizi ve model ağırlıklarınızı versiyonlayın. * **Neden:** Reprodüktibilite (tekrarlanabilirlik) ve işbirliği için hayati öneme sahiptir. Özellikle 2026'da MLOps süreçlerinde bu bir standarttır. * ❌ **Varsayılan Batch Size'lara Güvenmeyin:** Batch size, modelin performansı ve eğitim hızı üzerinde büyük etkiye sahiptir. Projenize ve donanımınıza uygun olanı deneylerle bulun. * **Neden:** Çok küçük batch size'lar eğitimi yavaşlatabilir ve gürültülü gradyanlara yol açabilirken, çok büyük batch size'lar genelleme yeteneğini azaltabilir ve GPU belleğini aşabilir. * ✅ **Güvenlik: Model Zehirlenmesi (Model Poisoning) ve Veri Gizliliği:** Üretim ortamında modelinizi adverser saldırılardan koruyun ve hassas verilerin gizliliğini sağlayın. * **Neden:** Adversarial saldırılar, modelin yanlış tahminler yapmasına neden olabilir. Veri gizliliği, özellikle GDPR ve KVKK gibi yönetmelikler kapsamında yasal zorunluluktur. Hassas verileri anonimleştirin veya tokenleştirin. * ✅ **TensorBoard Kullanın:** Eğitim metriklerini, model grafiğini ve görselleştirmeleri izlemek için TensorBoard'u aktif olarak kullanın. * **Neden:** Eğitim sürecini anlamak, hataları ayıklamak ve hiperparametre ayarlaması yapmak için paha biçilmez bir araçtır. Ekibimizde TensorBoard'u kullanarak eğitim süreçlerindeki darboğazları hızla tespit ediyoruz. ### Yaygın Hatalar ve Çözümleri TensorFlow ile çalışırken karşılaşabileceğiniz bazı yaygın sorunlar ve bunların çözümleri: #### 1. GPU Belleği Yetersiz (OOM - Out of Memory) Hatası * **Problem:** `ResourceExhaustedError: OOM when allocating tensor` veya benzeri bir hata alıyorsunuz. * **Sebep:** Modeliniz veya batch boyutunuz GPU belleğine sığmıyor. * **Çözüm:** * Batch boyutunu küçültün. * Modelinizin karmaşıklığını azaltın. * Daha az bellek tüketen veri tipleri kullanın (örn. `tf.float16` ile karışık hassasiyet eğitimi). * `tf.config.experimental.set_memory_growth(gpu, True)` ile GPU belleğinin dinamik olarak ayrılmasını sağlayın. Bu, production ortamında karşılaştığımız en sık sorunlardan birine pratik bir çözümdür. ```python gpus = tf.config.list_physical_devices('GPU') if gpus: try: # Sadece ihtiyaç duyulduğu kadar GPU belleği ayırır for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) logical_gpus = tf.config.list_logical_devices('GPU') print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs") except RuntimeError as e: print(e) ``` #### 2. TensorShape Uyumsuzlukları * **Problem:** `ValueError: Dimensions must be equal` veya `Input 0 of layer "..." is incompatible with the layer: expected shape (None, X, Y, Z), found shape (None, A, B, C)` gibi hatalar. * **Sebep:** Katmanlar arasında tensör boyutları (şekilleri) uyuşmuyor. * **Çözüm:** * Modelinizin `model.summary()` çıktısını inceleyerek katmanlar arasındaki boyut geçişlerini kontrol edin. * `tf.keras.layers.Reshape` veya `tf.expand_dims`, `tf.squeeze` gibi operasyonlarla tensör boyutlarını manuel olarak ayarlayın. * Veri ön işleme adımlarınızın modelin beklediği şekli ürettiğinden emin olun. #### 3. Model Kaydetme/Yükleme Hataları * **Problem:** Eğitilmiş modeli kaydederken veya yüklerken `OSError` veya `KeyError` gibi hatalar alıyorsunuz. * **Sebep:** Kaydetme formatı uyumsuzlukları, özel katmanlar veya fonksiyonlar. * **Çözüm:** * Modelleri her zaman `model.save('model_path.keras')` veya `model.save('saved_model_dir', save_format='tf')` ile kaydedin. `SavedModel` formatı (varsayılan) en esnek olanıdır. * Özel katmanlarınız veya kayıp fonksiyonlarınız varsa, bunları `tf.keras.utils.custom_object_scope` veya `custom_objects` parametresi ile yüklerken belirtmeniz gerekir. ```python # Özel bir katmanınız varsa class CustomLayer(tf.keras.layers.Layer): def __init__(self, units=32, **kwargs): super(CustomLayer, self).__init__(**kwargs) self.units = units def call(self, inputs): return inputs * self.units def get_config(self): config = super(CustomLayer, self).get_config() config.update({"units": self.units}) return config # Modeli kaydederken # model.save('my_custom_model.keras') # Modeli yüklerken with tf.keras.utils.custom_object_scope({'CustomLayer': CustomLayer}): loaded_model = tf.keras.models.load_model('my_custom_model.keras') ``` #### 4. `tf.function` ile Python Side-Effect'leri * **Problem:** `tf.function` ile bir fonksiyonu dekore ettiğinizde, Python print ifadeleri gibi yan etkiler yalnızca ilk çağrıda çalışır veya beklenen şekilde davranmaz. * **Sebep:** `tf.function`, Python kodunu bir TensorFlow grafiğine dönüştürür ve grafiğin içinde Python yan etkileri genellikle göz ardı edilir veya farklı şekilde işlenir. * **Çözüm:** * Grafiğin içinde Python kodunu çalıştırmak için `tf.py_function` kullanın (ancak performans maliyeti olabilir). * Hata ayıklama için `tf.print` kullanın. Bu, grafiğin içinde çalışacak şekilde tasarlanmıştır. * Yan etkileri `tf.function` dışına taşıyın. ```python @tf.function def my_graph_function(x): tf.print("Grafik içinde x:", x) # Bu her çağrıda çalışır # print("Python print:", x) # Bu sadece ilk çağrıda çalışır veya hiç çalışmaz return x * 2 result = my_graph_function(tf.constant(5)) print("Sonuç:", result.numpy()) ``` ### Performans Optimizasyonu TensorFlow modellerinizin eğitim ve çıkarım (inference) performansını artırmak için 2026'da uygulayabileceğiniz bazı kritik teknikler: #### 1. Veri İşleme Hattını Optimize Etme (`tf.data`) Veri okuma ve ön işleme, çoğu zaman model eğitimindeki en büyük darboğazdır. `tf.data` API'si ile bu süreci optimize edebilirsiniz. * **`cache()`:** Veri setini bellekte veya yerel depolamada önbelleğe alın. Küçük veri setleri için bellekte, büyük veri setleri için diske önbelleğe alınabilir. * **`prefetch()`:** Eğitim sırasında sonraki veri parti (batch)lerini CPU'da hazır tutarak GPU'nun boş kalmasını engeller. `tf.data.AUTOTUNE` parametresi ile en uygun değeri otomatik belirleyebilir. * **`map()` ile Paralel Dönüşümler:** Veri dönüşümlerini birden fazla CPU çekirdeğinde paralel olarak çalıştırın (`num_parallel_calls=tf.data.AUTOTUNE`). ```python import tensorflow as tf # Örnek veri seti (büyük olduğunu varsayalım) def generate_data(): for i in range(10000): yield tf.random.normal((64,)), tf.random.uniform((1,), maxval=10, dtype=tf.int32) dataset = tf.data.Dataset.from_generator(generate_data, output_types=(tf.float32, tf.int32)) # Optimize edilmiş veri işleme hattı BATCH_SIZE = 64 optimized_dataset = dataset.shuffle(1000) \ .batch(BATCH_SIZE) \ .cache() \ .prefetch(tf.data.AUTOTUNE) print("Optimize edilmiş veri hattı oluşturuldu.") # Bu veri hattı ile model eğitimi çok daha hızlı olacaktır. ``` #### 2. Karışık Hassasiyet Eğitimi (Mixed Precision Training) GPU'larda `float16` (yarım hassasiyet) ve `float32` (tek hassasiyet) veri tiplerini bir arada kullanarak eğitim hızını artırabilir ve bellek kullanımını azaltabilirsiniz. Modern GPU'lar `float16` işlemleri için özel donanım hızlandırıcılara (Tensor Cores) sahiptir. **Problem:** Model eğitimini hızlandırmak ve GPU belleğini daha verimli kullanmak. **Çözüm:** ```python import tensorflow as tf # Karışık hassasiyet politikasını etkinleştirin tf.keras.mixed_precision.set_global_policy('mixed_float16') # Modelinizi oluşturun (katmanlar otomatik olarak mixed_float16 ile uyumlu hale gelir) model = tf.keras.Sequential([ tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) # Optimizer'ı 'LossScaleOptimizer' ile sarmalayın optimizer = tf.keras.optimizers.Adam() optimizer = tf.keras.mixed_precision.LossScaleOptimizer(optimizer) model.compile(optimizer=optimizer, loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy']) # Sahte veri x_train = tf.random.normal((1000, 784)) y_train = tf.random.uniform((1000,), maxval=10, dtype=tf.int32) print("\nKarışık Hassasiyet Eğitimi Başlıyor...") model.fit(x_train, y_train, epochs=3, batch_size=64) print("Karışık Hassasiyet Eğitimi Tamamlandı.") # Politika ayarını eski haline getirebilirsiniz tf.keras.mixed_precision.set_global_policy('float32') ``` #### 3. XLA Derlemesi (Accelerated Linear Algebra) XLA, TensorFlow grafiklerini donanıma özgü, optimize edilmiş makine koduna derleyen bir derleyicidir. Bu, özellikle TPU'larda ve bazı GPU'larda önemli performans artışları sağlayabilir. **Problem:** TensorFlow grafiklerinin yürütme hızını artırın. **Çözüm:** `tf.function` dekoratörüne `jit_compile=True` parametresini ekleyerek etkinleştirebilirsiniz. ```python import tensorflow as tf @tf.function(jit_compile=True) def compiled_function(x, y): return tf.matmul(x, y) + tf.constant(1.0) a = tf.random.normal((1000, 1000)) b = tf.random.normal((1000, 1000)) print("\nXLA Derlemesi ile fonk