Deeplearning4j ile Derin Öğrenmeye Giriş #1

Deeplearning4j Giriş

Yeni bir seri ile tekrardan merhaba. Yazının adından da anlaşılacağı üzere bu seride Deeplearning4j kütüphanesi ile (bundan sonra DL4J olarak kısaltacağım) derin öğrenmeyi ele alacağız. Daha önce “Derin Öğrenme” kategorisine farklı kütüphaneler kullanarak görüntü sınıflandırma gibi uygulamalar yapmıştık, bu seride de benzer konuları ele alacağız fakat Python programlama dili yerine  DL4J nin desteklediği java dilini kullanacağım. Yazılarda konunun kısa be öz teorik anlatımının yanı sıra uygulama (kaynak kod) ağırlıklı olacaktır. Örneğin sinir ağları (ANN, CNN, DNN) ile sınıflandırma, NLP (Doğal Dil İşleme) ile chat bot, Nvidia ekran kartları için Cuda ile GPU programlama, model eğitimi, farklı derin öğrenme kütüphaneleri ile entegrasyon gibi DL4J nin sahip olduğu bir çok şeyi anlatmayı planlıyorum.

Kimler İçin

Daha önce programlama bilgisi olmayan, akademik çalışma yapacak biriyseniz Python, Matlab ile Caffe, Tensorflow, Keras vb. kütüphaneler tavsiyem olacaktır, fakat Java programlama diline aşina iseniz işte tam size göre. Java ile web, masaüstü veya mobil uygulama geliştirenler için ise çok fazla alternatifi olmayan bir kütüphane olduğu için fazla söze gerek olduğunu düşünmüyorum.

Ne Gerekli

Temel seviyede JavaSE bilgisi en temel gereksinimimiz olacaktır bunun yanı sıra geliştirmeler için IntelliJ IDEA kullanacağım ve sorun yaşamamanız için tavsiye ederim, ücretsiz olan Community sürümü işimizi görecektir. İşletim sistemi bağımlılığı olmamakla birlikte kullanacağımız kütüphaneler için Mac OS ve Linux en sorunsuz işletim sistemi olmasına rağmen ben Windows üzerinde geliştirme yapıyor olacağım. Bu konudaki tercih sizin işletim sistemi üzerindeki yeteneğinize kalmış.

Ön Hazırlık

Bu seride değineceğim (detaylı olmayabilir) fakat sizin önceden araştırmanızı tavsiye edeceğim bazı konular var. Teorik değil uygulama üzerine bir seri olacağı için eksik kalmaması adına farklı kaynaklardan temel seviyede  araştıra bileceğiniz konuları belirtmekte fayda olduğunu düşünüyorum. Bu konular;  Makine öğrenmesi, yapay sinir ağı, segmentasyon ve Keras kütüphanesidir.

DeepLearning4j Nedir?

DL4J kendini en temel şekilde  “Sinir Ağları’nı oluşturmak, eğitmek ve dağıtmak için geliştirilmiş java tabanlı bir araç setidir.” olarak tanımlamaktadır.  DL4J bir çok açık kaynak derin öğrenme kütüphanesinden yararlanan, hızlı bir şekilde ürün geliştirmeye olanak veren açık kaynak kodlu bir kütüphanedir. Farklı kütüphaneler (keras, tensorflow vb.) ile eğittiğiniz modelleri kullanabilmenize de olanak sağlar.  Intel ve AMD64 mimarsinin yanı sıra ARM üzerinde çalışmaktadır bu sayede iOT  projeler Raspberry Pi vb. gibi donanımlar üzerinde çalıştabilir, Android projeleri için rahatlıkla kullanabilirsiniz. Bilgiğiniz üzere bir çok derin öğrenme kütüphanesi ARM desteği vermemektedir. DL4J kütüphanesi bilimsel hesaplamalar, büyük boyuttaki matrisler oluşturmak ve hesaplama yapmak, GPU gücünden faydalanmak için yine Java ile geliştirilmiş açık kaynak kodlu bir başka kütüphane olan N-Dimensional Arrays for Java (ND4J)‘yi kullanır. ND4J nin Python dünyasındaki karşılığı Numpy kütüphanesidir.

Derin Öğrenme Kütüphaneleri

Aşağıdaki tablo aktif olarak kullanılan ve geliştirilen derin öğrenme kütüphanelerini görmektesiniz. Listeye bakıldığında Java ile geliştirme yapacaksanız fazla alternatifiniz olmadığını görebilirsiniz, yine DL4J’nin diğer kütüphanelerden pek fazla eksiği olmadığıda görülmektedir.

Kaynak: https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

 

 

 

Burada DL4J kütüphanesinin diğerlerinden üstün olduğunu savunmuyorum, derin öğrenme projeleri geliştirecekseniz  sadece Python, Matlab, C++ odaklı değil Java odaklı, tüm ihtiyaçlarını karşılayabilecek bir kütüphanenin de var olduğunu anlatmaya çalışıyorum :).

Kaynaklar

Kaynak olarak kullanacağım kitaplar Machine Learning – Jason Bell ve Java Deep Learning Essentials – Yusuke Sugomori