Ara 162017
 
Raspberry Pi ve Makine Öğrenmesi
385 kez okundu

Raspberry Pi ve Makine Öğrenmesi

Yeni bir startup olan Jetpac, görsel tanıma yazılımı Deepbelief’i farklı sistem ve cihazlar üzerinde kolayca kurulup kullanılabilir hale getirdi. Bu girişim, Raspberry Pi ve Makine Öğrenmesi açısından da önemli bir kazanım olacak gibi görünüyor.

DeepBelief sistemini Linux, iOS, OSX, Android, Raspberry Pi ve Javascript üzerinde kullanmak mümkün.

Bu yazımda DeepBelief’in Raspberry Pi üzerinde kurulumunu ve çalıştırılmasını ele alacağım.

Aynı konu http://www.instructables.com/id/Machine-learning-with-Raspberry-Pi/ adresinde işlenmiş. Ancak orada verilen direktifler benim kullandığım Raspberry Pi B+ v1.2 üzerinde biraz sorun yarattı. Ama bu sorunun çözümü de var.

Şimdi en başından başlayarak aşamalar halinde işlemlerimize geçelim:

1. Önce Raspi’ye bağlanalım: (Ben Ubuntu 16.04 üzerinde ssh komutuyla bağlanıyorum. Siz de kendi sisteminizin gerektirdiği şekilde veya cihazınıza klavye, fare ve ekran bağlayarak çalışabilirsiniz.)

Uzaktan bağlanabilmek için Raspinin IP numarasını bilmeniz gerekir. Bu amaçla

komutunu kullanabilirsiniz. sudo kullanırsanız, root yetkisiyle daha ayrıntılı bir rapor alırsınız.

2. GPU kullanımı için bellek tanımlama:

Dosyanın sonuna aşağıdaki satırı ekleyelim:

3. Bellekte yaptığımız değişikliğin sistem tarafından algılanması için cihazımızı yeniden başlatalım:

4. Raspinin kendini yeniden başlatması birkaç dakika sürebilir. Yeteri kadar bekledikten sonra yeniden bağlanalım.

5. Dosyalarımızı github üzerinden indireceğimiz için git uygulamasını kurmamız gerekiyor.

6. Artık DeepBeliefSDK dosyalarını indirip kurulumunu yapabiliriz.

7. Kurulumu yaptık. Sonucu denetlemek için örnek uygulamayı çalıştıralım:

Eğer herşey yolunda gittiyse 998 satırlık bir rapor elde edeceksiniz.

Ya da benim gibi “Can’t open device file: /var/lib/jpcnn/char_dev” mesajını alacaksınız. Bu hata mesajından kurtulmak için aşağıdaki komutları verin:

Artık uygulamamızı yeniden çalıştırabiliriz:

Elde edeceğimiz rapor resimdekine benzeyecektir.

Raspberry Pi ve Makine Öğrenmesi

deepbelief uygulaması, herhangi bir parametre verilmeden çalıştırıldığı zaman “lena.png” dosyasını varsayılan olarak yükler ve öntanımlı imagenet nesneleriyle karşılaştırarak benzerlik oranlarını bulur.

Raporda sıra no, benzerlik olasılığı ve nesne etiketi sıralanır.
En büyük olasılığa sahip olan görüntülerle eşleşme gerçekleşmiştir diyebiliriz.
Eğer sonuçları olasılık değerine göre sıralarsak, benzerlikleri yorumlamamız daha kolay olur.

İstediğiniz bir başka görseli taratmak isterseniz, adını parametre olarak vermek gerekir. Örneğin “cicek.jpg” dosyasını taratmak istediğimizde vereceğimiz komut şöyledir:

DeepBelief sistemini Ubuntu üzerinde kurmak çok daha kolay oluyor. Siz de kendi sisteminizde deneyin.

Ahmet Aksoy

Referanslar:

Ara 112017
 
149 kez okundu

Bottle Örnek Yapılacaklar Listesi

Önceki yazımda Python Bottle Mikro Ağ-Çerçevesi konusunu kısaca ele almıştım.

Bu yazımda ise https://bottlepy.org sitesindeki örneği, bazı mesajlarını Türkçeleştirerek aktaracağım.

bottle örnek yapılacaklar listesi

İlk çalışmamda edit, save, new gibi terimleri de Türkçeleştirmiştim. Ama sonra Python programcılarının ister istemez teknik İngilizce terimleri bilmeleri gerektiğini düşünerek sadece bazı mesajları Türkçeleştirmekle yetindim.

Orijinal kod listesinde eksik bırakılan help.html dosyasını ekledim ve içine kısaca bottle projesi çalışırken kullanılacak terimlerin işlevini basit bir tablo olarak ilave ettim.

Örijinal kodlarda static_file(‘help.html’, root=’.’) satırında bulunması gereken return anahtar sözcüğü unutulmuştu. Onu da ekledim.

Uygulama, basit “Yapılacaklar Listesi” için gereken işlevlere sahip. Veritabanı olarak SQLite3 kullanıyor.

Düzenlemeleri yaparken Pycharm Community Edition sürümünü kullandım. Python sürümü 3.6.3 ve bottle sürümü 0.12.13.

Pycharm ile “bottle” isimli yeni bir proje klasörü tanımladım.

İlk aşamada veritabanını oluşturmalıyız. Sitede verilen kod satırlarını biraz revize edip veritabani.py dosyasına kaydettim. Bu betik veritabanını oluşturmak amacıyla sadece bir kez çalıştırılacak.

Sistemde ana kod dosyamız dışında help.html isimli bir yardım dosyamız, 3 tane de şablon (template) dosyamız bulunuyor. (SQLite3 veritabanı dosyası todo.db de aynı klasörde.)

Önce html ve şablon dosyaların içeriğini aktarayım:

help.html dosyası

make_table.tpl şablon dosyası

edit_task.tpl şablon dosyası

new_task.tpl şablon dosyası

Son olarak Python kod dosyası todo.py

Dosyalarımızın hepsi bottle proje klasörünün içinde yer alıyor.

Kodların, ek açıklamaya gerek duymayacak kadar açık olduğunu düşünüyorum. Arada bir kaç satırlık açıklama da var zaten.

Yine de sormak istedikleriniz olursa, yorum alanını kullanabilirsiniz.

Ahmet Aksoy

Bottle Örnek Yapılacaklar Listesi


Referanslar:

Ara 102017
 
122 kez okundu

Python Bottle Mikro Ağ-Çerçevesi

bottleBir WSGI (Web Server Gateway Interface) mikro ağ-çerçevesi (micro web-framework) olan bottle, flask gibi benzerlerinden farklı olarak, tüm kod işlemleri için tek bir dosya kullanır. O nedenle web ve ağ-çerçevesi işlemlerine yabancı olanlar için daha kolay anlaşılır ve pratik bir çalışma alanı sunmaktadır.

https://bottlepy.org/docs/dev/ adresinde bu ağ-çerçevesi ile ilgili her türlü açıklamaya ulaşabilirsiniz. Aynı adreste çok güzel, öğretici örnekler yer almaktadır.

Ubuntu Kurulum

Pip ile Kurulum

Kurulumu pip ile yaparken Python 3’ün devrede olmasına dikkat edin.

Sitedeki ilk örneği kendimize uyarlayalım:

Yukarıdaki betiği çalıştırdıktan sonra etkin web gezgin (browser) programınızı açın ve adres kutusuna aşağıdaki ifadeyi yazın:

“Ahmet” yerine kendi adınızı ya da bir başkasınınkini yazabilirsiniz.

Bu örneğin çalışabilmesi için bilgisayarınızda etkin bir yerel ağ sunucusu olmalıdır.

“localhost” yerine gerekiyorsa “127.0.0.1” de kullanabilirsiniz.

@route ifadesinin özel bir işlevi vardır. Dekoratör fonksiyon kavramına yabancıysanız http://python.gurmezin.com/pythonda-fonksiyon-dekoratorleri/ adresindeki yazıma göz atmak isteyebilirsiniz.

Bir sonraki yazımda çok daha kapsamlı ve işlevsel bir örneği sizinle paylaşacağım.

Bottle ile çalışmayı öğrendiğinizde ağ-çerçevesi sistemlerini, dekoratörleri ve jinja2 gibi şablon yapılarını daha yakından tanımış olursunuz. Bu bilgilenme bottle’a göre daha kapsamlı çözümler sunan Flask ve Django gibi tanınmış uygulamalara geçişinizi daha kolay bir hale getirecektir.

Ağ çerçevesi sistemleri yerel ağ üzerinde kullanıldığında, masaüstü uygulamalara benzer çözümler üretebilmenize olanak verir. Üstelik bu tür uygulamaları internet ortamına taşıyarak daha yaygın bir şekilde paylaşılabilmelerini ve kullanılabilmelerini sağlarsınız.

Ahmet Aksoy

Python Bottle Mikro Ağ-Çerçevesi

Referanslar:

Ara 092017
 
192 kez okundu

Pythonda Liste Kısaltmaları

Liste kısaltmaları (list comprehensions), Python diliyle basit, kolay anlaşılır ve hızlı bir şekilde listeler oluşturmamızı sağlar.

Liste Kısaltmaları

Örneğin 0 ile 10 arasındaki ( 0 ve 10 dahil) tam sayıların karelerini hesaplayıp, sonuçları bir liste haline getirelim.

Bu işlemin en basit yöntemi for döngüsü kullanmaktır.

Aynı listeyi list ve map fonksiyonları kullanarak da oluşturabiliriz:

Üçüncü yöntemimiz ise liste kısaltması kullanmaktır:

Her üç yöntemin sonucu da aynıdır:

Şimdi 5 ile 18 arasındaki (5 ve 18 dahil) sayılarla 2’nin üssünü hesaplayalım:

Sonuçlar aynı:

3 ile 28 arasındaki çift sayılar:

Sonuçlar aynı:

2 ile 24 arasındaki tek sayılar için liste kısaltması:

Sonuçlar:

Kısacası yinelenebilir (iterable) bir nesneden bir liste oluşturmak istediğimizde:

Liste kısaltmamıza filtre uygulamak içinse if anahtar sözcüğünü kullanıyoruz:

Bir önceki yazımda liste kısaltmalarının for döngülerinden ve map() fonksiyonundan daha hızlı çalıştığını belirtmiştim.

Şimdi bu kıyaslamayı basit bir örnek üzerinden kendimiz yapalım. Kıyaslama işleminde bir dekoratör fonksiyonu kullanalım.

Sonuç:

Elbette bu sonuçlar betiği çalıştırdığınız bilgisayarın çalışma hızına da bağlıdır ama, aynı işlemin farklı yöntemlerle uygulanmasının farklı süreler aldığını açıkça görebiliyoruz.

Eğer yazdığınız kodlar çalışma hızına duyarlı ise, kesinlikle liste kısaltması kullanmanızı öneriyorum. Eğer böyle bir kaygınız yoksa ve Python konusunda çok fazla deneyiminiz bulunmuyorsa, for yöntemini kullanın. Böylece map veya liste kısaltmasının içeriğini algılamak için çaba sarfetmenize gerek kalmaz.

Şahsen ben, bu konuda Guido van Rossum’a katılıyorum: Eğer çok özel nedenleriniz yoksa lambda, map, filter ve reduce gibi ek araçlara ihtiyacınız olmayacaktır.

Ahmet Aksoy

Referanslar:

Ara 082017
 
972 kez okundu

Python Dilinde Lambda, Map, Filter ve Reduce

İşler hep Guido van Rossum’un istediği gibi gitseydi, Python dilinde lambda, map, filter ve reduce kavramları olmayacaktı. Ama bazı gruplardan gelen talepler ağır bastı; sonuç olarak lambda, map ve filter Python çekirdeğinde varlıklarını sürdürmeye devam ederken, sadece reduce functools modülüne kaydırıldı.

Rossum’un bu terimlere karşı çıkmasının gerekçeleri şunlardı:

    • Liste kısaltmaları (list comprehensions) lambda, map, filter ve reduce yerine daha güçlü bir şekilde kullanılabilir.
    • Liste kısaltmaları daha açık ve anlaşılırdır.
    • Python yaklaşımına aykırı bir şekilde, aynı soruna yönelik birden fazla Python çözüm yöntemi olacaktır.

Liste kısaltmaları for döngülerine kıyasla % 35, map fonksiyonuna kıyasla %45 daha hızlı çalışmaktadır. Dolayısıyla kodlama yaparken bu ayrıntıları da bilmekte yarar var.

lambda Fonksiyonu

ile

fonksiyonları aynı işleve sahiptir.
İlkinde anonim bir fonksiyon tanımlayıp, bu fonksiyonu kare değişkenine atıyoruz. Diğerinde ise doğrudan bir fonksiyon tanımlıyoruz.

map Fonksiyonu

map fonksiyonu 2 argüman alır. İlk argüman bir fonksiyon, ikinci argüman ise bir dizilimdir (sequence). map fonksiyonu ilk argüman olarak verilen fonksiyona dizilim elemanlarının her birini argüman olarak atar ve sonuçları bir map nesnesi olarak geri döndürür.

Sonuçlar:

filter Fonksiyonu

Bu fonksiyon da tıpkı map gibi ilk argüman olarak bir fonksiyon, ikinci argüman olarak bir dizilim alır. Ancak geriye sadece, fonksiyona uygulandığında True değer üreten dizilim elemanlarını döndürür.
Aşağıdaki kod satırları 1 ila 20 arasındaki sayılardan 3’e tam olarak bölünenleri geri döndürmektedir.

Sonuçlar:

reduce Fonksiyonu

Bu fonksiyon functools modülünde yer alır ve geriye tek bir sonuç döndürür.
Örneğin 1 ile 100 arasındaki sayıların toplamını bulalım:

Sonuç:

Bir sonraki yazımda liste kısaltmaları (list comprehensions) konusunu ele alacağım.

 

Ahmet Aksoy

Referanslar:

 

Ara 062017
 
245 kez okundu

Pythonda Fonksiyon Dekoratörleri

En kaba tanımıyla dekoratörler, yazılım tasarım kalıplarıdır.

Dekoratörler fonksiyon, metod ve sınıfların işlevselliğinin, dekore edilen fonksiyonun veya alt sınıfların kaynak kodlarında değişiklik yapmaya gerek kalmadan değiştirilebilmesini sağlarlar.

Pythonda Fonksiyon Dekoratörleri

Özetle dekoratörler, yapısını değiştirmek istemediğimiz fonksiyonların davranışlarını; yani işlevlerini değiştirmek amacıyla kullanılır.

Dekoratörler, fonksiyonların hem parametre, hem de dönüş değeri olarak kullanılabilme özelliğine dayanır.

“@” işareti dekoratör tanım operatörü olarak kullanılır. (Aynı işaret matris çarpım operatörü olarak da kullanılmaktadır.)

Şimdi dekoratör uygulamasını örnekleyecek küçük bir örnek geliştirelim.
Eğer Türkçe karakterlerin kullanımı konusunda benim gibi titiz biriyseniz, string.lower() fonksiyonu uygulanmış Türkçe karakterlerden ‘I’ harfinin ‘ı’ yerine ‘i’ olarak geri döndüğünü farketmişsinizdir.

Bu hatayı gidermek için tr_lower_dekorator isimli bir fonksiyon hazırlayalım. Bu dekoratör fonksiyonumuz parametre olarak func isimli bir başka fonksiyon alıyor. Bu fonksiyonun aldığı parametre ise x stringi.

Dekoratör fonksiyonumuzun içinde fonksiyon(x) isimli ara fonksiyonumuz mevcut. Bu fonksiyon, önce, parametre olarak aldığı x stringindeki ‘I’ karakterlerini ‘ı’ harfine dönüştürüyor, sonra da orijinal fonksiyonu çağırarak ‘I’ harfleri düzeltilmiş stringe lower() fonksiyonunu uyguluyor.

Kodlar aşağıda. Sormak istediğiniz bir şey olursa, en aşağıdaki yorum alanını kullanabilirsiniz.

Betiğimizin döndürdüğü bilgiler şöyledir:

İlk satırda orijinal string, ikinci satırda string.lower() fonksiyonu kullanılarak elde edilmiş string, son satırda ise string.lower() fonksiyonuna dekoratör uygulanmış haliyle üretilmiş string yer almaktadır.

turkce_lower02() fonksiyonunu kolayca düzenleyip doğru sonuç üretmesini sağlayabilirdik. Örneğimizin anlaşılabilir olması için böyle basit bir fonksiyon kullandım. Bu fonksiyon yerine çok daha karmaşık bir fonksiyon olsaydı, dekoratörün etkisi daha açık bir şekilde ortaya çıkacaktı.

Dekoratörler bottle, flask ve django gibi ağ çerçevelerinde (web application framework) sıklıkla kullanılmaktadır.

Ahmet Aksoy

Referanslar:

Ara 012017
 
116 kez okundu

Python Zemberek Bağlantısını Güncelleyelim

Python Zemberek Bağlantısı2016 Mayısında yazdığım Python ile Zemberek Kütüphanesini Kullanmak makalesini artık güncellemenin zamanı geldi.

Aslında güncellenecek pek fazla şey yok.
Çünkü: zemberek-tum-2.0.jar kütüphane dosyası yine aynı.
JPype1-py3 bileşeninin sürüm numarası değişmedi: 0.5.5.2.
Sadece benim şimdiki Ubuntu sürümüm 16.04 ve Python sürümüm ise 3.6.3.

Önceki yazımda verdiğim kodlar bire bir geçerli.

Yine de kodları son haliyle anımsamakta yarar var:

Önceki yazımda zemberek-tum-2.0.jar dosyasının içindeki (veya herhangi bir jar dosyasının içindeki) sınıfların listesini nasıl elde ettiğimi belirtmemişim.
Aşağıdaki komut, bu listeyi elde etmemizi sağlıyor:

jar dosyasının adını değiştirerek istediğiniz sınıf listesini dökebilirsiniz.

Bu arada sevindirici bir başka haber: Zemberek projesi yeni bir yapılanmayla tekrar gündemde: Zemberek-NLP
Akın kardeşler Zemberek projesini eskisinden bağımsız bir şekilde yeniden geliştiriyorlar.
Sonucu ben de merakla bekliyorum.

Ahmet Aksoy

Kas 302017
 
95 kez okundu

Python Yazılarım

Daha önce yazmış olduğum Python ile ilgili bazı yazıların linklerini bir araya getirdim.

İçlerinde ilginizi çekenler olabilir:

Ahmet Aksoy

Kas 292017
 
77 kez okundu

Bu siteyi hem yazmış olduğum Python kitaplarında yer alan kodları paylaşmak, hem de sizlerle daha etkin bir iletişim ortamı sağlamak amacıyla oluşturdum.

Ancak bu site sadece sözkonusu kitapların içeriğiyle sınırlı kalmayacak, ufuklarını her geçen gün biraz daha uzaklara taşımayı hedefleyecektir.

Dilerseniz, sizler de bu sistemin bir parçası olabilirsiniz.

Sitemize üye olmanız paylaşımlarınızı daha etkin bir düzeye taşıyacaktır. Ama üye olmasanız bile yorumlara katılabilir, düşüncelerinizi bizimle paylaşabilirsiniz.

Hoşgeldiniz.

Ahmet Aksoy