Öncelikle sınıflandırıcı eğitimine girmeden kullanacağımız kütüphaneye ve bilinmesi gereken bazı kavramlara bakalım.
TensorFlow Nedir?
TensorFlow , veri akış grafikleri kullanarak sayısal hesaplama için kullanılan açık kaynak kodlu bir derin öğrenme kütüphanesidir. Grafikteki düğümler, matematiksel işlemleri temsil ederken, grafik kenarları aralarında iletilen çok boyutlu veri dizilerini (tensörler) temsil eder. Esnek mimari, hesaplamayı tek bir API ile bir masaüstü, sunucu veya mobil cihazdaki bir veya daha fazla CPU’ya veya GPU’ya dağıtmanıza olanak tanır. TensorFlow başlangıçta, makine öğrenimi ve derin sinir ağları araştırması yürütmek amacıyla Google’ın Google Brain ekibi tarafından geliştirildi. Alternatifleri Caffe, Torch, Kerras, Theano, deeplearning4j vb.
Sınıflandırıcı Nedir?
Sınıflandırma bire bir olarak kelime anlamı ile örtüşmektedir. Doğadaki canlılar çeşitli özelliklerine;dış görünüş, organ yapısı, akrabalık, anatomik benzerlik vb. göre sınıflandırırlar. Bizim sınıflandırma olarak bahsettiğimiz şeyde aslında budur. Somut bir örnek verecek olursak dünya üzerindeki ülkelerin kendine özgü özellikleri vardır, yani bir ülkenin bayrağını gördüğünüzde milli marşını duyduğunuzda bu ülkeyi diğer tüm ülkelerden ayırır ve adını söyleyebilirsiniz. Bilgisayar bilimindede sınıflandırıcılar işte böyle çalışımaktadırlar. Elinizde bir veri seti (data set) bulunur ve bu veri setindeki veriler farklı kümeler oluştururlar daha sonra bu veri seti dışında olan bir eleman geldiğinde bunun özelliklerine bakararak ilgili küme içerisine yerleştirirsiniz. Bir yazılım geliştiriyoruz ve bu yazılımın bizim gösterdiğimiz bir hayvanın ne olduğunu bilmesi istiyorsak başvuracağımız yöntemlerden bir tanesi sınıflandırıcı olacaktır. Daha önceden elimizde bulunan kümelenmiş hayvan resimleri sayesinde yeni bir eleman geldiğinde bunun hangi kümenin elamanı olabilceğini saptayabiliyor olacağız.
TensorFlow Kurulumu
TensorFlow ile geliştirme yapabilmek için Python sürümünüzün 3.5.x veya üzerinde olması gerekiyor. Kurulumu ise oldukça basit pip ile aşağıdaki şekilde kurabilirsiniz. Bu kütüphanelerin GPU üzerinde de çalışabildiğini söylemiştik, eğer NVIDIA bir GPU ya sahipseniz GPU versiyonunu kurabilirsiniz. AMD GPU üzerinde çalıştırmak bazı opensource paraleleştirme küğtüphaneleri ile mümkün uğraşmak isteyenler kaynak kodu indirip derleyebilirler. TensorFlow’u doğrudan Linux, MACOS ve Windows üzerine kurabilirsiniz. Github reposunda Android için de bir örnek proje mevcut mobil geliştirme yapmak istiyorsanız ona göz atabilirsiniz.
CPU Sürümü
pip3 install --upgrade tensorflow
GPU Sürümü
pip3 install --upgrade tensorflow-gpu
Detaylı bilgi almak için buradaki dökümanına göz atabilirsiniz.
TensorFlow ile geliştirme yapmak için daha kullanışlı bir yol ise Docker kullanmaktır. TensorFlow ekibi tarafından bir Docker image’ı hazırlanmıştır, bu sayede sanal makine üzerinde her şey hazır bir şekilde rahatlıkla testlerinizi yapabilirsiniz. Docker nedir diye merak ediyorsanız bu 10 dakikalık bu videoya göz atabilirsiniz ve not olarak ekleyeyim Docker Windows platformunda (Windows 10 pro x64) çalışabilmektedir.
(Docker üzerinde çalışmayacaksanız bu adımları atlayabilirsiniz.)
Docker kurulumunu yaptıysanız, tensor flow için hazırlanan image’ı kurarak başlayalım. Öncelikle Windows PowerShell’i açalım ve;
docker run -it gcr.io/tensorflow/tensorflow:latest-devel
image indirme işlemi tamamlandıktan sonra aşağıdaki docker komutu ile başlatalım;
docker run -it gcr.io/tensorflow/tensorflow:latest-devel
bu adımdan sonra image ayağa kalkmış olacaktır.
Bundan sonraki adımlar sınıflandırıcı eğitimini ve kullanımını anlatacaktır.
Veri Setinin Hazırlanması
Testlerde sıkça kullanılan örnek veri setini indirebilirsiniz. Bu veri seti içerisinde çeşitli kategorilerde çiçek resimleri bulunmaktadır (papatya, gül vb.).
http://download.tensorflow.org/example_images/flower_photos.tgz
Docker üzerinde bu veri setini indirmek için ise curl kullanabilirsiniz. ve indirdiğimiz veri setini aynı dizine çıkartalım.
cd $HOME mkdir tf_files cd tf_files curl -O http://download.tensorflow.org/example_images/flower_photos.tgz tar xzf flower_photos.tgz
Eğitim için gerekli her şey Tensorflow example içerisinde mevcut (tensorflow/examples/image_retraining/), git reposundan son halini almak için
cd /tensorflow git pull
python tensorflow/examples/image_retraining/retrain.py \ --bottleneck_dir=/tf_files/bottlenecks \ --how_many_training_steps 500 \ --model_dir=/tf_files/inception \ --output_graph=/tf_files/retrained_graph.pb \ --output_labels=/tf_files/retrained_labels.txt \ --image_dir /tf_files/flower_photos
image dir olarak veri setini dizinini veriyoruz, model ve etiketlerin oluşturulmasını istediğiniz dizini belirtin.
Eğitim işlemi sonunda model kullanıma hazır hale gelecektir.
Model Nasıl Kullanılır?
output_graph.pb model dosyası tf_files/output_labels.txt ise model tanımlarını içeren etiketler yani kategorilerdir.
import tensorflow as tf, sys # Tahmin isteyeceğimiz resim parametre olarak gönderilecek image_path = sys.argv[1] # Görüntü okunur image_data = tf.gfile.FastGFile(image_path, 'rb').read() # Etiket dosyasını yükler, satır başı çizgilerini kaldırır # Uygun dizini belirtiniz label_lines = [line.rstrip() for line in tf.gfile.GFile("retrained_labels.txt")] #model dosyası tanımlanır with tf.gfile.FastGFile("retrained_graph.pb", 'rb') as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) _ = tf.import_graph_def(graph_def, name='') with tf.Session() as sess: softmax_tensor = sess.graph.get_tensor_by_name('final_result:0') predictions = sess.run(softmax_tensor, \ {'DecodeJpeg/contents:0': image_data}) top_k = predictions[0].argsort()[-len(predictions[0]):][::-1] for node_id in top_k: human_string = label_lines[node_id] score = predictions[0][node_id] print('%s (score = %.5f)' % (human_string, score))
Yukarıdaki kaynak kod ile modelimizi kullanarak tahmin değerini alabilmekteyiz, bu kodu tensorflow örnekleri arasında train dizini altında da bulabilirsiniz.
Kullanmak içinde;
python label_image.py test_goruntu.jpeg
Sonuç olarak size skor listesi döndürecektir.
daisy (score = 0.99071) sunflowers (score = 0.00595) dandelion (score = 0.00252) roses (score = 0.00049) tulips (score = 0.00032)
Ayrıca Bakınız:
- https://www.tensorflow.org/get_started/get_started
- http://derindelimavi.blogspot.com.tr/2017/03/semantik-bolutleme-ve-fcn.html
- http://www.bilgisayarkavramlari.com/2013/03/31/siniflandirma-classification/
- https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/