TensorFlow, Google Brain ekibi tarafından geliştirilen açık kaynak kodlu bir makine öğrenimi kütüphanesidir. Makine öğrenimi alanında büyük ölçekli sayısal hesaplama, yapay sinir ağları ve makine öğrenimi modellerinin oluşturulması ve eğitilmesi için kullanılır. TensorFlow, yüksek performanslı hesaplama yetenekleri sunarak, karmaşık matematiksel işlemleri yapmaya olanak sağlar ve kullanıcıların verileri, modelleri ve sonuçları görselleştirmesine olanak tanır. TensorFlow, birden çok programlama dilinde kullanılabilen bir API sağlar, bu nedenle farklı dillerdeki yazılımcılar tarafından kullanılabilir. TensorFlow, birçok endüstriyel uygulama, akademik araştırma ve geliştirme projelerinde yaygın olarak kullanılmaktadır.
TensorFlow, yapay sinir ağları gibi makine öğrenimi algoritmalarını uygulamak için kullanılan açık kaynaklı bir yazılım kütüphanesidir. Bu kütüphane, hesaplama grafiklerinin oluşturulması, eğitilmesi ve dağıtılması için güçlü bir araçtır. Ayrıca, yapay sinir ağları yanı sıra doğrusal regresyon, sınıflandırma, kümeleme ve diğer makine öğrenimi algoritmalarını da uygulamak için kullanılabilir.
Yapay sinir ağları, biyolojik sinir sistemlerinden esinlenerek tasarlanmıştır ve birçok makine öğrenimi problemi için kullanılabilir. Bu ağ yapısı, birçok katmandan oluşur ve her katman, girdileri işlerken önceki katmanların çıktılarına dayanır.
TensorFlow, yapay sinir ağı modellerinin tasarlanması, eğitilmesi ve değerlendirilmesi için bir dizi API sağlar. Bu API’ler, yüksek seviyeli bir API olan Keras’ın yanı sıra düşük seviyeli bir API olan TensorFlow API’si ile birlikte kullanılabilir.
Yapay sinir ağları, birçok farklı makine öğrenimi problemini çözmek için kullanılabilir. Örneğin, görüntü tanıma, doğal dil işleme, ses tanıma ve daha pek çok alanda kullanılabilir. TensorFlow’un yapay sinir ağları için kapsamlı bir kütüphane sunması, bu alanlarda çalışan araştırmacıların ve geliştiricilerin işlerini kolaylaştırmaktadır.
Tensorflow 2.1.12
TensorFlow 2.12.0, TensorFlow 2.x serisinin son sürümüdür ve önceki TensorFlow sürümlerine göre birçok avantaj sunar. TensorFlow 1.x serisi ile karşılaştırıldığında, TensorFlow 2.x serisi daha yüksek düzeyde API’ler sunar ve kullanımı daha kolaydır. Özellikle, TensorFlow 2.x, Keras API’si gibi yüksek düzeyli API’ler sağlar ve bu API’ler sayesinde model oluşturma ve eğitme süreci daha hızlı ve kolay hale gelir.
TensorFlow 2.12.0, TensorFlow 2.x serisinin diğer sürümlerine kıyasla birçok iyileştirme içerir. Örneğin, TensorFlow Lite model dönüştürücüsü ve TFLite GPU desteği gibi önemli geliştirmeler yapılmıştır. Ayrıca, GPU’ların kullanımı için daha iyi destek sağlanmıştır ve TensorFlow Eager Execution modu da iyileştirilmiştir.
Özetle, TensorFlow 2.12.0, önceki TensorFlow sürümlerine göre daha gelişmiş bir araçtır ve makine öğrenimi ve derin öğrenme alanında çalışan geliştiriciler için önemli bir kaynaktır. TensorFlow 2.x serisi, daha yüksek düzeyde API’ler ve kullanım kolaylığı sağlayarak model oluşturma ve eğitme sürecini daha hızlı ve verimli hale getirir.
Basit Linear Model (MNIST)
MNIST veri kümesi, makine öğrenimi alanında en sık kullanılan veri setlerinden biridir. Bu veri kümesi, 60.000 eğitim örneği ve 10.000 test örneği içeren 28×28 piksel boyutlarında gri tonlama rakam görüntülerinden oluşur. Bu veri kümesi, el yazısı rakamların tanınması için sıklıkla kullanılır.
Basit Linear Model, MNIST veri kümesinde kullanılan bir sınıflandırma modelidir. Bu model, girdi olarak 28×28 piksel boyutlarında bir görüntü alır ve her pikseli tek bir sayı ile temsil eder. Bu sayılar, 784 boyutlu bir vektörde birleştirilir. Model, bu vektörü alır ve çıktı olarak 0-9 arasındaki olası sınıflar için bir olasılık dağılımı verir.
Modelin yapısı oldukça basittir. İlk katman, girdi vektörünü alır ve doğrudan çıktı katmanına bağlanır. Çıktı katmanı, 10 sınıf için softmax aktivasyon fonksiyonunu kullanarak olası sınıflar için bir olasılık dağılımı üretir. Model, adam optimize ediciyi ve sparse_categorical_crossentropy kayıp fonksiyonunu kullanarak derlenir. Bu kayıp fonksiyonu, sınıflandırma modellerinde yaygın olarak kullanılır.
Modelin eğitimi, MNIST veri kümesindeki örnekler üzerinde gerçekleştirilir. Veriler öncelikle normalize edilir ve ardından eğitim örnekleri için model uygun bir şekilde derlenir. Model, fit() yöntemi kullanılarak eğitilir ve doğrulama veri kümesinde değerlendirilir. Eğitim süreci boyunca, model, kayıp fonksiyonunu minimize etmek için geriye doğru yayılım (backpropagation) algoritması kullanarak ağırlıkları günceller. Model, eğitim süreci sonunda test örnekleri üzerinde değerlendirilir ve doğruluk oranı hesaplanır.
Basit Linear Model, MNIST veri kümesindeki sınıflandırma problemini çözmek için yeterli bir modeldir. Ancak, daha karmaşık yapay sinir ağı yapıları kullanılarak daha yüksek doğruluk oranları elde edilebilir.
Basit bir lineer modeli MNIST veri kümesiyle eğitmek için örnek bir kod parçası aşağıdaki gibi olabilir:
import tensorflow as tf
from tensorflow.keras.datasets import mnist
# Veri kümesini yükle
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# Verileri normalize et
x_train = x_train / 255.0
x_test = x_test / 255.0
# Lineer modeli tanımla
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(10, activation=’softmax’)
])
# Modeli derle
model.compile(optimizer=’adam’,
loss=’sparse_categorical_crossentropy’,
metrics=[‘accuracy’])
# Modeli eğit
model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))
# Modeli değerlendir
test_loss, test_acc = model.evaluate(x_test, y_test)
print(‘Test accuracy:’, test_acc)
Bu kod bloğu, MNIST veri setini yükler ve ardından bir lineer model tanımlayarak, eğitir ve doğrulama veri setinde değerlendirir. Model, Sequential API’sini kullanarak oluşturulur.
İlk katman, girdi boyutunu (28×28 piksel) düzleştirir, ikinci katman ise çıktı katmanıdır ve 10 sınıf için softmax aktivasyon fonksiyonunu kullanır. Model, adam optimize ediciyi ve sparse_categorical_crossentropy kayıp fonksiyonunu kullanarak derlenir.
Son olarak, model, fit() yöntemi kullanılarak eğitilir ve doğrulama veri kümesinde değerlendirilir.
Bu örnek, yapay sinir ağları alanındaki temel konuları kapsar ve basit bir modeli eğiterek MNIST veri setinde doğruluk elde etmektedir. Ancak, daha karmaşık modeller kullanarak daha yüksek doğruluk elde etmek mümkündür.
Çok Layerlı Sinir Ağı
Çok katmanlı sinir ağı, bir yapay sinir ağı türüdür ve derin öğrenmenin temelini oluşturur. Bu ağ yapısı, verileri işlemek ve çıktı üretmek için birbirine bağlı birçok yapay sinir hücresi ya da nöronlar içeren birden fazla katmandan oluşur. Bu katmanlar, bir önceki katmanın çıktılarını alarak verileri daha yüksek seviyelerde temsil edebilir.
Çok katmanlı sinir ağları, genellikle yüksek boyutlu ve karmaşık verileri işlemek için kullanılır. Bu veriler, görüntüler, ses dosyaları, doğal dil metinleri veya sensörlerden gelen veriler gibi farklı türlerde olabilir. Bu ağlar, özellikle derin öğrenme ve yapay zeka alanlarında önemli bir rol oynar.
Çok katmanlı sinir ağlarının en basit hali, bir giriş katmanı, bir çıktı katmanı ve bir ya da daha fazla ara katmandan oluşur. Bu ara katmanlar, girdi verilerinin işlenmesi için çeşitli matematiksel işlemler yaparlar ve ardından çıktı katmanına yönlendirirler.
Çıktı katmanı, son tahmin veya sınıflandırma sonuçlarını üretir.
Bu sinir ağı türü, öğrenme süreci sırasında geriye doğru yayılım (backpropagation) adı verilen bir algoritma kullanır. Bu algoritma, verilen bir girdiye karşılık beklenen çıktıya yaklaşmak için ağdaki ağırlıkların güncellenmesini sağlar. Bu süreç, veri kümesindeki örneklerin tekrar tekrar ağa beslenerek, ağırlıkların optimize edilmesi ile gerçekleştirilir.
Çok katmanlı sinir ağları, derin öğrenme alanındaki başarılarıyla öne çıkar. Bu ağ yapısı, çeşitli görüntü, ses ve doğal dil işleme görevlerinde özellikle yüksek doğruluk oranları elde eder. Örneğin, görüntü tanıma, nesne tespiti, yüz tanıma ve otomatik sürüş teknolojilerinde kullanılır. Ayrıca, doğal dil işleme uygulamalarında, metin sınıflandırma, dil modelleme ve makine çevirisi gibi görevlerde de kullanılır.
Loss Grafiği
Loss grafiği, makine öğrenimi modellerinin eğitimi sırasında kullanılan önemli bir araçtır. Bu grafik, modelin kaybını (loss) eğitim süreci boyunca takip etmek için kullanılır. Kayıp, modelin tahminlerinin gerçek değerlerden ne kadar uzak olduğunu ölçen bir metrik olarak kullanılır ve modelin amacı kaybı mümkün olduğunca düşük tutarak daha doğru tahminler yapmaktır.
Loss grafiği, genellikle eğitim ve doğrulama kayıplarını aynı grafikte gösterir.
Eğitim kaybı, modelin eğitim verileri üzerindeki performansını yansıtırken, doğrulama kaybı, modelin doğrulama verileri üzerindeki performansını yansıtır. Bu grafiğin amacı, modelin eğitim sürecinde aşırı uyuma (overfitting) yapmadığını ve doğrulama verileri üzerinde de iyi bir performans sergilediğini kontrol etmektir.
Loss grafiği genellikle eğitim döngüsü (epoch) sayısı karşısında çizilir. Eğitim döngüsü sayısı arttıkça, kayıp genellikle azalır çünkü model daha iyi hale gelir ve daha doğru tahminler yapabilir. Ancak, aşırı uyum gibi problemler nedeniyle kayıp, eğitim döngüsü sayısı arttıkça artabilir.
Loss grafiği, modelin performansını izlemenin yanı sıra, hiper parametrelerin ayarlanması ve farklı modellerin performanslarının karşılaştırılması gibi kararların verilmesinde de kullanılır.
Örneğin, öğrenme oranı gibi hiper parametrelerinin ayarlanmasında loss grafiği, hangi değerin daha iyi performans gösterdiğini görmek için kullanılabilir.
Sonuç olarak, loss grafiği, modelin kaybını görselleştiren bir araçtır ve modelin performansını izlemek, hiper parametreleri ayarlamak ve farklı modellerin performansını karşılaştırmak gibi birçok amaçla kullanılabilir.
Dropout
Dropout, makine öğrenimi ve derin öğrenme modellerinde aşırı uyum (overfitting) sorununu önlemek için kullanılan bir düzenlileştirme tekniğidir. Bu teknik, ağırlıkların düzenlileştirilmesi ve modelin genelleştirilmesi için kullanılır. Dropout tekniği, modelin belirli bir bölümünü (nöronlar veya özellikler) her eğitim döngüsünde rastgele olarak atarak çalışır.
Dropout teknikleri, özellikle büyük ve karmaşık veri setleri için kullanışlıdır. Bu teknik, aşırı uyum sorununu önlemeye yardımcı olur ve modelin daha genel bir veri kümesi üzerinde doğru sonuçlar üretmesini sağlar. Dropout, özellikle yüksek boyutlu veri setleri veya çok sayıda özellik içeren veri setleri gibi zorlu senaryolarda başarılıdır.
Dropout, aşağıdaki şekilde çalışır:
- Dropout, nöronların belirli bir yüzdesini her eğitim döngüsünde rastgele olarak atar. Bu sayede, ağdaki farklı nöronlar her eğitim döngüsünde farklı bir şekilde aktive olur.
- Bu rastgele atma işlemi, modelin farklı özellikleri (nöronlar) öğrenmesini sağlar ve böylece model, daha geniş bir veri kümesi üzerinde daha iyi genelleştirilebilir.
- Dropout, aynı zamanda modelin aşırı uyum yapmasını da önler. Çünkü atılan nöronlar, modelin sadece bir bölümünü temsil eder ve modelin genelleştirme kabiliyetini artırır.
- Dropout, nöronlar arasındaki bağımlılıkları azaltır ve böylece model, daha iyi bir özellik seçimine yol açar. Bu sayede, modelin eğitim süreci daha hızlı hale gelir ve daha az hafıza gerektirir.
Dropout tekniği, hem geleneksel yapay sinir ağı (ANN) modelleri hem de evrişimli sinir ağı (CNN) modelleri için kullanılabilir. Dropout, TensorFlow, Keras ve PyTorch gibi popüler makine öğrenimi çerçeveleri tarafından desteklenir.