Derin öğrenme algoritmalarının çalıştırılması, çalışmaların gerçekleştirilmesi ve problemlerin çözülmesi için kullanılan pek çok kütüphane vardır. Günümüzde mevcut kütüphaneler sürekli güncellenmekte, ayrıca yeni kütüphaneler de kullanıma sunulmaktadır. Ancak bu kütüphaneler arasında tam anlamıyla baskın olanı da bulunmamaktadır. Kullanıcılar deneyimlerine dayalı olarak farklı kütüphanelerde çalışmalar yapmaktadırlar. Derin öğrenme çalışmalarını gerçekleştirmek için kullanılan kütüphanelerden bazıları şunlardır.
TensorFlow: Makine öğrenmesi için Google tarafından geliştirilen uçtan uca bir açık kaynak platformudur. Makine öğrenmesi uygulamaları için kapsamlı, esnek araçlar ve kütüphaneler ile topluluk kanyakları içeren bir ekosisteme sahiptir. Çok sayıda soyutlama seviyesi bulunduğu için çözülmek istenilen probleme uygun olanı seçme imkânı sunar. Keras API’si, yaygın olarak pek çok derin öğrenme probleminde kullanılmaktadır. Uygulama anında yineleme ve sezgisel hata ayıklama mümkündür. Büyük çaplı makine öğrenmesi eğitim görevleri için, model tanımını değiştirmeden farklı donanım yapılandırmalarında dağıtılmış eğitim için Dağıtım Stratejisi API (Distribution Strategy API) kullanımı mevcuttur.
TensorFlow ile sunucularda, cihazlarda ve webde model oluşturup eğitme ve dağıtma imkanı bulunmaktadır. Extended, Lite ve TensorFlow.js gibi farklı ortamlarda çalıştırılabilecek yapıları bulunmaktadır. Google, Intel, Twitter, CocaCola, airbnb, DeepMind, GE Healtcare, NeRSC gibi büyük firmalar, TensorFlow ile makine öğrenmesi uygulamaları gerçekleştirmektedir. Ayrıca dünyada pek çok araştırmacı, bu açık kaynak kütüphanelerini kullanarak araştırmalarını sürdürmektedir. Öne çıkan özellikleri şunlardır:
- Hem GPU hem de CPU ile paralel çalışabilmesi,
- TensorBoard ile görselleştirme yapılabilmesi,
- Model ve veri paralelliği sağlaması,
- Hızlı derleme yapılabilmesi.
Theano: Çok boyutlu dizileri içeren matematiksel ifadeleri verimli bir şekilde tanımlayabilen, optimize ederek değerlendirmeye imkân sağlayan bir Python kütüphanesidir. Python’da yazılmış çok genel bir kütüphane doğrudan derin öğrenme için kullanıldığı gibi üzerine yazılmış keras veya lasagne gibi kütüphanelerle de kullanılabilir. 2007’den itibaren geliştirilerek pek çok makine öğrenmesi probleminin çözümünde kullanılmıştır. 2017 yılında, artık Theano kütüphanesinin geliştirilmeye devam etmeyeceği, Yoshua Bengio tarafından duyurulmuştur. Öne çıkan özellikleri şunlardır:
- NumPy ile sıkı entegrasyonu,
- GPU ile kullanılabilmesi,
- Sembolik türev almada etkililiği,
- Hız ve kararlılık optimizasyonları,
- Dinamik C kodu üretimi,
- Kapsamlı birim-testi ve kendini-doğrulama.
Caffe: İfade, hız ve modülerliği göz önünde bulundurarak yapılan derin bir öğrenme çerçevesidir. Berkeley AI Research (BAIR) ve topluluk katılımcıları tarafından geliştirilmiştir. Caffe projesi Yangqing Jia’nin UC Berkeley’deki doktora eğitimi sırasında başlatılmıştır.
Mimarisi, uygulamaları ve derin öğrenme problemlerinde kullanımı teşvik edici yapıdadır. Modeller ve optimizasyonlar, kodlama ihtiyacı hissetmeden yapılandırma üzerinde tanımlanabilir. Bir GPU makinesinde eğitmek için tek bir etiket ayarlayarak CPU ile GPU arasında geçiş yapılabilir ve bilgisayarlar ile mobil cihazlar üzerinde kullanılmak için dağıtılabilir. Genişletilebilir yapısı ve fonksiyonelliği sayesinde, pek çok araştırmacı tarafından yenilikler ve eklemeler yapılmıştır. Hızlı çalışma özelliği vardır. Öne çıkan özellikleri şunlardır:
- GPU desteği,
- Kod yazmadan model eğitimi,
- Kullanışlı Python arayüzü,
- Görüntü işleme hızı,
- Önceden eğitilmiş modelleri.
Caffe2: Hafif, modüler ve ölçeklenebilir bir derin öğrenme çerçevesidir. Caffe üzerine inşa edilen Caffe2, ifade, hız ve modülerlik düşünülerek tasarlanmıştır. Nvidia ve Facebook tarafından ortaklaşa tasarlanan Caffe2, yeni modellerin ve algoritmaların topluluk katkılarından yararlanarak derin öğrenmenin kullanılması için kolay ve anlaşılır bir yol sağlamayı amaçlamaktadır. Caffe2, birbiriyle değiştirilebilir şekilde çalışan Python ve C++ API’leri ile birlikte gelir. Böylece hızlı bir şekilde prototip oluşturulup daha sonra optimize edilebilir.
Caffe2, masaüstü, sunucular ve yerleşik aygıtlar için yüksek performanslı, çoklu GPU hızlandırması sağlamak için en son NVIDIA Deep Learning SDK kitaplıklarından, cuDNN, cuBLAS ve NCCL’den tam olarak yararlanmak için ayarlanmıştır. Bulut hizmetlerinde veya Docker görüntülerinde kullanılabilir ya da Mac, Windows veya Ubuntu tabanlı bilgisayarlara yüklenebilir. Caffe2, mobil geliştirme için Android Studio, Microsoft Visual Studio veya XCode ile de bütünleşik olarak çalışmaktadır. Öne çıkan özellikleri şunlardır:
- Dağıtılmış CNN eğitimi, tek veya birden fazla GPU ya da birden fazla makinede eğitim olsun, tek bir hesaplama grafiği ile temsil edilebilir. Bu, Facebook ölçeğinde derin öğrenme uygulamaları için çok önemlidir.
- Özel donanımda kolay heterojen hesaplama, (Örneğin, iOS’ta Caffe2 hesaplama grafiği CPU’dan bir görüntü alabilir, onu Metal GPU tampon nesnelerine dönüştürebilir ve maksimum verim için hesaplamayı tamamen GPU üzerinde tutabilir).
- Memonger ile statik bellek optimizasyonu veya en iyi performans için önceden paketlenmiş eğitimli ağlar gibi çalışma zamanı kaynaklarının daha iyi yönetimi.
Keras: Derin öğrenme uygulamaları için hazırlanmış Python dilini kullanan bir derin öğrenme kütüphanesidir. Keras, TensorFlow, CNTK veya Theano’nun üzerinde çalışabilen üst düzey bir sinir ağları API’sidir. GPU ya da CPU üzerinde çalışmasını bu kütüphaneler üzerinden sağlar. Daha üst düzey bir kütüphane olduğundan Theano ya da Tensorflow’a göre daha kolay uygulama geliştirilebilir olduğu için yaygın kullanım alanına sahiptir. Öne çıkan özellikleri şunlardır:
- Kolay ve hızlı prototipleme sağlaması (kullanıcı dostu, modülerlik ve genişletilebilirlik aracılığıyla),
- CNN ve RNN ile ikisinin kombinasyonlarını desteklemesi,
- CPU ve GPU üzerinde çalışabilmesi.
Keras, kullanıcı deneyimini ön planda tutan, kullanıcı dostu bir arayüzü olan ve makineler için değil, insanlar için tasarlanmış bir API’dir. Hata ayıklama için geri bildirim sağlar. Birbiriyle tutarlı ve basit kullanımlı API’ler sunar. Yeni modüllerin eklenmesi kolay olup, mevcut örneklerle yapılabilecek çözüm kümesi geniştir. Bu özellikleri araştırmalar için uygun yapıda olmasını sağlar ve genişletilebilir.
Sinir ağı katmanları, maliyet fonksiyonları, optimize ediciler, başlatma şemaları, aktivasyon fonksiyonları ve düzenlileştirme şemaları, yeni modeller oluşturmak için birleştirilebilecek modüler tasarıma imkân sağlar. Bildirim biçiminde ayrı model yapılandırma dosyası yoktur. Modeller, kompakt, hata ayıklaması kolay ve genişletilebilirlik kolaylığı sağlayan Python kodunda açıklanmıştır.
PyTorch: GPU’ları ve CPU’ları kullanan derin öğrenme için optimize edilmiş bir tensör kütüphanesidir. İki üst düzey özellik sağlayan bir Python paketidir. Öne çıkan özellikleri şunlardır:
- Güçlü GPU hızlandırma ile tensör hesaplaması (NumPy gibi),
- Bant tabanlı bir otograd sistemi üzerine kurulu derin sinir ağları.
PyTorch, monolitik bir C++ çerçevesine bağlanan bir Python değildir. Python’a derinlemesine entegre olmak için inşa edilmiştir. Yeni sinir ağı katmanları Python’da çeşitli kütüphaneler kullanılarak yazabilir ve Cython ile Numba gibi paketler kullanılabilir. Dilimleme, indeksleme, matematik işlemleri, doğrusal cebir, indirgeme gibi bilimsel hesaplama gereksinimlerini hızlandırmak ve karşılamak için çok çeşitli tensör rutinleri sunmaktadır.
MXNet: Apache MXNet, esnek ve etkili bir derin öğrenme kütüphanesidir. MXNet gibi hızlandırma kütüphaneleri, geliştiricilerin GPU’ların ve bulut bilişimin tüm özelliklerinden yararlanmasına yardımcı olacak araçlar sunar. Bu araçlar genellikle herhangi bir matematiksel hesaplama için faydalı ve uygulanabilir olsa da, MXNet, büyük ölçekli derin sinir ağlarının gelişimini ve yayılmasını hızlandırmaya özel bir önem vermektedir. Öne çıkan özellikleri şunlardır:
- Mevcut GPU’ların sayısıyla hesaplamayı ölçeklendirmeyi kolaylaştırarak çoklu GPU eğitimi sunması,
- Bir zamanlar sinir ağı araştırmalarını engelleyen türev hesaplamaları otomatik hale getirmesi,
- Optimize edilmiş önceden tanımlanmış katmanlar ile kullanıcının katmanlarını harmanlayarak kodlayabilirken, önceden tanımlanmış katmanlar, hız kazandırarak iyi performans göstermesini sağlaması,
- Her bir veri yapısı için ona uygun aygıt yerleşimi.
MXNet, GPU’lar ve dağıtılmış ekosistemler için, Python ve R gibi üst düzey ortamların konforundan optimize edilmiş sayısal hesaplama sağlar. MXNet ortak iş akışlarını otomatik hale getirir, böylece standart sinir ağları yalnızca birkaç kod satırında tam olarak ifade edilebilir. MXNet, iki programlama stilini destekler: zorunlu programlama (NDArray API tarafından desteklenir) ve sembolik programlama (Symbol API tarafından desteklenir). Matematiksel işlemleri optimize etmek için genel amaçlı bir araç setinin yanı sıra, MXNet önceden tanımlanmış sinir ağı katmanları sağlar.
CNTK: Microsoft Bilişsel Araç Seti (Cognitive Toolkit-CNTK), ticari sınıfta dağıtılmış derin öğrenme için açık kaynaklı bir araç setidir. Yapay sinir ağlarını, yönlendirilmiş bir grafik aracılığıyla bir dizi hesaplama adımı olarak tanımlar. CNTK, kullanıcının ileri beslemeli DNN’ler, CNN’ler ve tekrarlayan sinir ağları (RNN’ler / LSTM’ler) gibi popüler model tiplerini kolayca gerçekleştirmesini ve birleştirmesini sağlar. CNTK, çoklu GPU’lar ve sunucular arasında otomatik farklılaşma ve paralelleştirme ile SGD, hata geri yayılımı öğrenimini uygular. Python, C# veya C++ programlara bir kütüphane olarak dahil edilebilir veya kullanıcının kendi model açıklama dili (BrainScript) aracılığıyla bağımsız bir makine öğrenme aracı olarak kullanılabilir. Ek olarak, Java programlarında CNTK model değerlendirme işlevselliği kullanılabilir.
CNTK ayrıca, çerçeve birlikte çalışabilirliği ve paylaşımlı optimizasyon için açık kaynaklı bir paylaşılan model temsili olan Açık Sinir Ağı Değişimi ONNX biçimini destekleyen ilk derin öğrenme araçlarından biridir. Microsoft tarafından ortaklaşa geliştirilen ve diğerleri tarafından desteklenen ONNX, geliştiricilerin CNTK, Caffe2, MXNet ve PyTorch gibi çerçeveler arasında modeller taşımasına imkân tanır.
KNet: Julia üzerinde Deniz Yüret ve ortakları tarafından uygulanan derin öğrenme çerçevesidir. Julia’da tanımlanan modeller için dinamik hesaplamalı grafikler kullanarak GPU çalışmasını ve otomatik farklılaşmayı destekler. Knet, otomatik gradyan hesaplaması için çalışma zamanında oluşturulan dinamik hesaplamalı grafikleri kullanır. Bu da, makine öğrenim modellerinin, Julia gibi yüksek seviyeli bir dilin tam gücünü ve açıklamasını kullanarak yalnızca ileriye dönük hesaplamayı tanımlayarak uygulanmasına imkân tanır.
DIGITS: İnteraktif bir derin öğrenme GPU eğitim sistemidir. Nvidia DIGITS (Deep Learning GPU Training System-DIGITS), görüntü sınıflandırma, bölümleme ve nesne algılama görevleri için son derece hassas derin sinir ağını hızlı bir şekilde eğitmek için kullanılabilir. Verileri yönetme, çoklu GPU sistemlerinde sinir ağları tasarlama ve eğitme, gelişmiş görselleştirmelerle gerçek zamanlı performansı izleme ve dağıtım için sonuç tarayıcıdan en iyi performans gösteren modeli seçme gibi genel derin öğrenme görevlerini basitleştirir. Tamamen etkileşimlidir, böylece veri bilimcileri programlama ve hata ayıklama yerine ağları tasarlamaya ve eğitmeye odaklanabilirler. Öne çıkan özellikleri şunlardır:
- Caffe, Torch ve TensorFlow kullanarak görüntü sınıflandırma, segmentasyon ve nesne algılama için derin sinir ağları tasarlama, eğitme ve görselleştirme,
- DIGITS Model Mağazasından AlexNet, GoogLeNet, LeNet ve UNET gibi önceden eğitilmiş modelleri indirme,
- Gelişmiş model doğruluğu için öğrenme hızı ve parti büyüklüğü hiperparametresi taraması gerçekleştirme,
- Sinir ağı eğitim işlerini planlama, izleme, yönetme ve gerçek zamanlı olarak doğruluk ve kayıpları analiz etme,
- DIGITS eklentisi ile çok çeşitli görüntü formatlarını ve kaynaklarını içe aktarma,
- Birden fazla GPU’da eğitim işlerini otomatik olarak ölçeklendirme.
The VELES: Hızlı Derin öğrenme uygulama geliştirme için dağıtılmış bir platformdur. Python’da yazılmış, Apache 2.0 altında OpenCL veya CUDA kullanır, akış tabanlı programlama kullanılır. VELES motoru performans ve esnekliğe odaklanır. Tam bağlı ağlar, CNN, yinelenen ağlar gibi bilinen pek çok algoritma kullanılabilir. Tüm arka uçlar aynı arayüze sahiptir ve aynı hesaplama sonuçlarını veya doğruluğunu tek veya çift hassasiyetle sağlar. Öne çıkan özellikleri şunlardır:
- VELES’i Notebook veya Küme’ye tek bir komutla yerleştirme,
- 250'den fazla optimize edilmiş birimden model oluşturma,
- Loaders kullanarak hareket halindeyken veri setini analiz etme ve sunma,
- PC veya Yüksek Performanslı Küme’de çalıştırma,
- Eğitim sürecini uygulamalı olarak izleme,
- Eğitilmiş modeli otomatik olarak uygulama olarak çıkarma,
- Bulutta çalıştırma.
Bunlardan başka, Chainer, PaddlePaddle, Covnetjs, Deeplearning4j, PyLearn2, Deep Learn Toolbox-Matlab, Sci-Kit Learn, Accord.NET, Apache Spark, AccordMachineLearning vb. gibi makine öğrenmesi kütüphaneleri ve araçları mevcuttur. Farklı kullanım alanlarında, kullanıcılara sunulmuştur.
Dünden Bugüne Yapay ZekaKAYNAK:
Savaş, S. (2019), Karotis Arter Intima Media Kalınlığının Derin Öğrenme ile Sınıflandırılması, Gazi Üniversitesi Fen Bilimleri Enstitüsü Bilgisayar Mühendisliği Ana Bilim Dalı, Doktora Tezi, Ankara.