admin

Eyl 212018
 
alice ekler
157 kez okundu



Python ile Türkçe Kelime Eklerinin Dağılımı

Türkçe “eklemeli” bir dildir. Bu nitelikteki diğer iki dil Macarca ve Moğolcadır.

Türkçede kullandığımız kelimeleri türeten eklerin konumlarını ve frekanslarını belirleyen bir çalışma yaptım.

Bu amaçla ekleri ayrıştırıp sınıflandırmak için Zemberek kütüphanesinden yararlandım.

Çalışmamın bir bölümünde derlem dosyasındaki kelimeleri kullandım.

Rekorumuz “ilişki” isminde.

Bu isme 10 ayrı ek ulanarak “ilişkilendirilemeyeceklerini” sözcüğünün oluştuğunu görüyoruz.

Daha fazla kök içeren başka kelimeler de bulunabilir. Ama bu tür örnekler büyük olasılıkla uygulanabilirlikten uzak olacaklardır.

Bu sözcüğün Zemberek ile elde ettiğimiz kırılım yapısı şu şekilde:
ilişkilendirilemeyeceklerini
ilişki ISIM_KOK 0
ilişki-le ISIM_DONUSUM_LE 1
ilişki-le-n FIIL_EDILGENSESLI_N 2
ilişki-le-n-dir FIIL_ETTIRGEN_TIR 3
ilişki-le-n-dir-il FIIL_EDILGEN_IL 4
ilişki-le-n-dir-il-e FIIL_YETERSIZLIK_E 5
ilişki-le-n-dir-il-e-me FIIL_OLUMSUZLUK_ME 6
ilişki-le-n-dir-il-e-me-yecek FIIL_DONUSUM_ECEK 7
ilişki-le-n-dir-il-e-me-yecek-ler ISIM_COGUL_LER 8
ilişki-le-n-dir-il-e-me-yecek-ler-in ISIM_TAMLAMA_IN 9
ilişki-le-n-dir-il-e-me-yecek-ler-in-i ISIM_BELIRTME_I 10

Aynı yöntemle alice.txt öyküsünü sözcüklerine, sözcükleri de eklerine ayrıştırdım ve konum frekanslarını saptadım.

Öyküde kullanılan kelimelerin ek kırılım tablosu aşağıdaki gibidir:

Şimdi toplam ek frekanslarını görselleştirelim:

Türkçe Kelime Eklerinin Dağılımı

Konum 0’daki ek sayısı, aslında hiç ek almayan kelime sayısına karşılık geliyor.
Sadece bir ek alan kelimelerin toplamı, 4545.
6 ek alan kelime ise öyküde sadece 1 kez kullanılmış:(alamadıklarından: al-a-ma-dık-lar-ın-dan)
5 ek alan kelimeler şunlar: (toplandıklarında, resimlerindekine, mırıldandığından, kestiremiyordu, götüremeyeceğini, olamayacağını, kullanmamalıydın, bahsedemezdiniz, kesilemezdi, dolamadığını, söyleyebileceklerimin, beceremiyormuşum)

Sınırlı sayıda kelime kökü (20 bin civarı) ile kısıtlı sayıda ekin (yaklaşık 100 civarı) kombinasyonu, Türkçenin zenginliğini oluşturuyor.

Siz de aşağıda verdiğim kodlardaki kaynak dosyayı değiştirerek benzer incelemeler yapabilirsiniz.

Beni izlemeye devam edin.

Ahmet Aksoy

Keywords: türkçe kökler, kelime kökleri, türkçe kelime ekleri, zemberek, python, türkçe, eklemeli dil

Eyl 162018
 
pösteki saymak
404 kez okundu

Pösteki Saymak

Sizce, tek bir Türkçe kelime kökünden yapım ve çekim ekleri kullanarak en fazla kaç kelime türetilebilir?

Tam 5081 kelime. Bu kelimelerin türetildiği kök: et.

Bu sayının büyüklüğünde aynı kökün hem yüklem hem de isim olması elbette etkilidir.

Yazının sonunda “et” kökünden türemiş sözcüklerin bazılarını vereceğim.(Hepsini vermek yazıyı gereksiz yere uzatacaktır.)

İkinci sıradaki çok kullanılan kökümüz “ol” yüklemidir. Ondan türeyen kelime sayısı: 3536.

Aşağıdaki grafikte en verimli 20 Türkçe kökü görüyorsunuz.

pösteki saymak

Sözcük türetmede kullanılan ekleri de benzer şekilde ayrıştırıp, frekanslarını buldum. En fazla kullanılan ilk iki ek “ler” ve “leri” ekleri. Onları “ları” ve “lar” izliyor. Onların peşinden gelenlerin çoğunluğunu yine çoğul eklerinin çeşitlemeleri oluşturuyor.

Sözcük türetiminde en fazla kullanılan ilk 20 eki de aşağıdaki grafikte görebilirsiniz:

pösteki saymak

Sözkonusu sayıları elde ederken bir milyon altı yüz altı bin yedi yüz yirmi iki (1,606,722) kelime içeren, kısmen denetlenmiş bir listeden yararlandım. Bu listeden çıkan tekil kök sayısı 20910. Tekil ek sayısı ise 77815.

Son günlerde Türkçe sözcüklerin kök ve eklerine ayrılması çalışmalarına yeniden yoğunlaştım. Bunda Yavuz Kömeçoğlu ve Birol Kuyumcu’nun yayınladığı örnek kodun büyük etkisi oldu: https://github.com/deeplearningturkiye/kelime_kok_ayirici
Seq2seq yöntemiyle çalışan bu kodlar 5572 kelime ve kökünü içeren bir verisetini eğitiyor ve test ediyor. Başarı oranı %97.

Aynı sistemi, kelime sayısını 42600 civarına çıkararak tekrarladım. Bu kez başarı oranı 93.6 oldu.

Parametrelerle oynayarak başarı oranı biraz daha yükseltilebilir sanırım. Ama her bir deneme GPU’lu bir makinede bile bazen saatler sürüyor.

Türkçe Doğal Dil İşleme (NLP) çalışmalarında kök ayırıcı olarak bu sistemden yararlanmak mümkün. Küçük hatalar bu tür çalışmalarda kolaylıkla hoş görülebilir.

Ancak, bu başarı düzeyleri beni bir türlü tatmin etmiyor. Çünkü ben, aslında, yazım hatalarını otomatik olarak -dışarıdan- denetleyen bir sistem geliştirme peşindeyim. Hedefim “SIFIR HATA”!

İşte burada yeni -ve çok daha basit- bir yöntem kullanmanın çok daha verimli olacağına inanıyorum: denetimden geçmiş, doğru ve güvenilir bir kelime listesi kullanmak.

Elimde iki milyona yakın sözcük barındıran ve kısmen denetlenmiş bir liste var. Bu haliyle bile oldukça iyi sonuçlar veriyor. (https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinde paylaştığım derlem dosyalarından siz de böyle bir liste oluşturabilirsiniz.)

Aynı listeyi kök ayrımında kullanılacak şekilde geliştirmek de mümkün.

İşte bu tür çalışmaların hemen hepsi, “pösteki saymak” kavramıyla örtüşebilecek nitelikte… Çok fazla emek, sabır ve dikkat gerektiriyor. Üstelik bu çabanın “Türkçe dilgisi” ile de yoğrulmuş olması şart. Türkçe bilgime her ne kadar güveniyor olsam da, bu konunun akademik uzmanı değilim. Umuyorum ki, bir gün “bu işlerin uzmanları” da taşın altına elini koyar.

Çalışmalarımı -şimdilik- kendi kişisel emek ve bilgilerimi kullanarak gerçekleştiriyorum. “SIFIR HATA” hedefime ulaşana kadar da sürdüreceğim.

Liste (aslında sözlük) yöntemini kullanarak çözümlemeye çalıştığım kaynakların pek çoğu aşırı derecede kirli. Bu kaynakların pek çoğu tarayıcı kullanılarak sayısallaştırılmış. Bu sırada, uygulamalardaki Türkçe uyum sorunları nedeniyle pek çok yazım hatası oluşmuş. İnsan beyni bu tür hataları kolaylıkla tolere edebilse de, temiz ve güvenilir bilgi derleme açısından işler büyük ölçüde zorlaşıyor.

Bir kaç kez gönüllü ekip oluşturmayı denedik, ama sonuç alamadık.

Şimdi, yaptığım çalışmalardan elde ettiğim sonuçları -veya bir kısmını- kaynaklara ekleyerek – bir tür forward propagation ve backward propagation yöntemiyle- daha sağlıklı sonuçlar elde etmeye çalışıyorum. İşin içine insan emeği girince, çalışmalar yavaşlıyor ister istemez. Ama sonuçtan memnunum.

Kelimeleri ayrıştırıp görselleştirdiğim Python kodları şöyle:

Bunlar da “et” sözcüğünden türetme yapan eklerden bazıları:
et
edebildi
edebildik
edebildikleri
edebildikleridir
edebildiklerim
edebildiklerimden
edebildiklerime
edebildiklerimi
edebildiklerimiz
edebildiklerimizden
edebildiklerimizdi
edebildiklerimize
edebildiklerimizi
edebildiklerimizin
edebildiklerince
edebildiklerinde
edebildiklerinden
edebildiklerine
edebildiklerini
edebildiklerinin
edebildikleriydi
edebildikleriyle
edebildikse
edebildikten
edebildiler
edebildilerse
edebildim
edebildin
edebildiniz
edebildiydi
edebildiyse
edebildiysek
edebildiysem
edebildiysen
edebildiyseniz

Liste uzayıp gidiyor…

Çalışmalarımın gelişimini ve aldığım sonuçları bu sayfalarda yeri geldikçe paylaşmaya devam edeceğim.
Yeni yazılarımdan haberdar olmak istiyorsanız, Sayfanın en altındaki “Beni yeni yazılarda e-posta ile bilgilendir” seçeneğini işaretleyin.

Ahmet Aksoy

Ağu 272018
 
Doların falı
1.062 kez okundu

Doların Falına Bakmak

Son günlerin en çok merak uyandıran konularından biri, elbette “dolardaki yükseliş” konusudur. En can alıcı soru: “Acaba dolar kaç liraya kadar yükselecek?”

Bu konuya bir nebze olsun katkıda bulunmak için, ben de doların falına bakayım dedim!…

Aslında faldan falan anlamasam da, elimde güzel bir fal bakma sistemi var. Facebook tarafından geliştirilmiş: fbprophet. Kullanımı olağanüstü kolay. Pandas ve numpy ile entegre edebiliyor; matplotlib ile sonuçları görselleştirebiliyorsunuz. Zaman serileri için çok pratik bir araç. Python 3.6.5 ile sorunsuz çalışıyor.

USDTRY günlük tarihsel verisini https://tr.investing.com sitesinden indirdim.
İndirdiğim verisetinde “Tarih”,”Şimdi”,”Açılış”,”Yüksek”,”Düşük”,”Fark %” kolonları var. Ben sadece “Tarih” ve “Şimdi” kolonlarını kullandım.

Grafikleri anlamlı bir şekilde yorumlayabilmek için elbette yeterli ekonomi bilgisine sahip olmak gerekiyor. Ben, böyle bir birikime sahip değilim. Yine de, ekonomi bilgisinden bağımsız olarak, ilginç birkaç bilgiye erişebildim:
1. Tarihsel bilgi aralığını çok geniş veya çok dar tutunca sonuçlar anlamsızlaşıyor.
2. 2 ila 5 yıllık dönemlerin eksterpolasyonu daha anlamlı görünüyor.
3. Doların ne yapacağını sadece eldeki tarihsel veriyi kullanarak kestirmek mümkün değil. (Bu işi ekonomistlere bırakmak yerinde olacak.)

Projede 3 ayrı dönemi inceledim: 2012, 2014 ve 2016 yılından günümüze kadarki dönemler.

1. dönem: 01.01.2016 – 24.08.2018 arası. Bu döneme göre 2019 yıl başında oluşacak dolar değeri yaklaşık 9.00 TL.

Doların falı

2016-2018 dönemi


2. dönem: 01.01.2014 – 24.08.2018 arası. Bu döneme göre 2019 yıl başında oluşacak dolar değeri yaklaşık 6.50 TL.
Doların falı

2014-2018 dönemi


3. dönem: 01.01.2012 – 24.08.2018 arası. Bu döneme göre 2019 yıl başında oluşacak dolar değeri yaklaşık 5.20 TL.
Doların falı

2012-2018 dönemi

Hangi senaryoyu seçeceğiniz, tamamen size kalmış.

Ben falda çıkanı söyledim sadece.

Bunlar da kodlarımız:

Ahmet Aksoy

  tarafından 15:13 itibariyle gönderildi.
Ağu 152018
 
70 kez okundu

Küçük Dev Adam Rasbberry Pi 3 B+ için 1 Terabaytlık Harici Disk Bağlantısı

Raspberry Pi 3 B+, küçücük boyutlarına rağmen büyük işler başarabilen bir araç. Onunla kablosuz -ya da isterseniz ethernet üzerinden- herhangi bir ağa kolayca bağlanabilir, ya da doğrudan internete erişebilirsiniz.
Onun belleğinin sadece 1 GB olması sizi yanıltmasın! Bu küçük dev adamın üzerinde NOOBS, RASPBIAN ya da RASPBERRY PI DESKTOP çalıştırabilirsiniz. Bunlara ek olarak, hemen çalıştırılmaya hazır 3. parti işletim sistemleri de var: Ubuntu Mate, Snappy Ubuntu Core, Windows 10 IOT Core ve OSMC bunlardan bazıları… Micro SD kartınıza bu işletim sistemlerinden istediğiniz birini yükleyin ve düğmeye basın! (Öyle dediğime bakmayın! Raspide düğme falan yok! Sadece güç adaptörünü fişe takmanız yeterli oluyor.)
Raspi, tahmin edeceğiniz üzere, sabit disk gibi kayıt araçlarına sahip değildir. Ama 4 adet USB soketine sahip. Yani istediğiniz sabit diski kolaylıkla sisteminize ekleyebilirsiniz.
Dilerseniz bu durumu hemen örnekleyelim.

KULLANACAĞIMIZ MALZEMELER

Raspberry Pi 3 B+
USB klavye ve fare
Raspi güç adaptörü
HDMI bağlantılı Monitör (veya HDMI adaptörü ile VGA monitör)
Harici Disk ve güç kaynağı
Disk bağlantısı için USB kablo
Anahtarlı çoklu priz
Elimde 1 TB’lik bir Seagate harici disk var. Biraz eski bir model. Ama bu eski modellerin şimdikilere kıyasla önemli bir artısı bulunuyor: harici bir güç kaynağına sahipler. Bu özellik önemli! Çünkü raspiye ekleyeceğiniz tüm cihazların ya çok az güç tüketmesi, ya da kendi harici güç kaynaklarına sahip olması gerekiyor. Raspinin kendi güç adaptörü, klasik harici diskleri beslemek için yeterli değildir. Bunu aklınızın bir köşesinde bulundurun! Aksi halde diske erişemezsiniz.
İşte bu yüzden, raspi ile birlikte kullanmak üzere bir disk edinmek istiyorsanız, mutlaka, kendi enerji kaynağı olan birini seçin.
Test için kullandığım raspiye bir adet USB klavye ve eski bir VGA monitör bağladım. RGB bağlantısını HDMI’a dönüştürmek amacıyla da bir VGA-HDMI dönüştürücüsü satın aldım. Ama sizin monitörünüzde bir HDMI bağlantısı varsa, böyle bir dönüştürücü kullanmanıza gerek kalmayacaktır.

HARİCİ DİSKİN BAĞLANMASI

Şimdi “df” komutuyla sistemimizin disk yapısını inceleyelim.

raspberry pi

Daha sonra harici diskimizi bağlayalım ve “df” komutunu yeniden çalıştıralım.

raspberry pi

İkinci resimde de görüldüğü gibi 976GB’lık disk /dev/hda1 olarak listemize eklenmiş durumda.

Artık bu diske istediğimiz gibi erişebilir; oradaki dosya ve klasörleri okuyup inceleyebilir ya da yeni dosyalarımızı bu diske kaydedebiliriz. (Yüklenen diskin izinlerine dikkat edin. Eğer NTFS formatlı bir disk kullanıyorsanız, yazma izinleriniz olmayabilir. Bu konuyu bir başka yazımda etraflıca ele alacağım.)

AĞ BİLGİSAYARINDAN RASPİYE ERİŞİP DOSYA KOPYALAMA

Peki raspiye bağlanmış bu diske aynı ağdaki bir başka bilgisayar üzerinden erişebilir miyiz?
“Evet!” dediğinizi duyar gibi oluyorum.
Raspi üzerinden bağlandığımız diske daha önceden “merhaba.txt” isimli küçük bir dosya kaydettim. Dosyanın içinde “Merhaba raspi!” cümlesi yazılı.
Bu dosyayı kontrol etmek için ilgili dizine geçip, dosya içeriğine bakalım.
$ cd “/media/pi/FreeAgent Drive/”
$ cat merhaba.txt

Aldığımız yanıt:
Merhaba raspi!
raspberry pi

Amacımız bir başka bilgisayardan raspiye erişip, buradaki merhaba.txt dosyasını yerel bir klasöre kopyalamak.

UBUNTU 16.04 ÜZERİNDEN rsync KOMUTUYLA DOSYA KOPYALAMA

Önce Ubuntu üzerinde çalışalım. Şu anda benim kullandığım sürüm Ubuntu 16.04.
İşte burada “rsync” komutu devreye giriyor. Bu komutun adı, “uzaktan senkronizasyon” (Remote Sync) sözcüklerinden türetilmiş. Sistem yedeklemelerinde sıklıkla kullanılıyor. İstenen dosyaları veya dosya gruplarını istediğimiz yere kopyalamamızı sağlıyor. Kaynak dosyaların ve hedefin yerlerini belirtmemiz yeterli.
Bu kez ağ üzerindeki bir başka bilgisayarda (kendi kullandığım Ubuntu 16.04 işletim sistemi olan laptop üzerinde) bir komut penceresi açıp aşağıdaki komutları verelim:
mkdir gecici
cd gecici
ls
rsync pi@192.168.1.39:”/media/pi/FreeAgent\ Drive”/merhaba.txt .
ls
cat merhaba.txt

Kopyaladığımız dosyayı kolay izlemek için önce gecici isimli bir klasör oluşturup, o klasöre geçiyoruz. rsync komutunu bu klasörün içindeyken veriyoruz.
rsync komutunda parametre olarak önce dosyamızın orijinal yerini (yani kaynak adresini), sonra da nereye kopyalanacağını (yani hedef adresini) belirtiyoruz. “pi” raspi üzerindeki yetkili kullanıcının adıdır. (Sizde bu ad farklıysa onu kullanın.) IP numarasından sonra “:” işareti konması gerekiyor. Disk sürücüsüne ait isimde boşluk işareti bulunduğu için bu ismi tırnak içine aldık ve boşluk işaretinden önce “\” kullandık. İsim birden fazla boşluk içeriyorsa, her boşluk işaretinden önce “\” koymayı unutmayın. Aynı kural klasör ve dosya isimleri için de geçerlidir.
Not: rsync komutundaki kaynak bilgisinde kullandığımız “192.168.1.39” IP numarasını raspi üzerindeki bir komut penceresinde “ifconfig” komutunu kullanarak elde ediyoruz. Aynı sonuca yerel ağ üzerindeki tüm bağlantıları tarayarak ulaşmak da mümkün. Ancak bu konuyu bir başka bir yazımda inceleyeceğim.
“rsync” komutunun en sonundaki “.” (nokta) işareti çok önemli. Bu işareti kullanarak, dosyamızı o an içinde bulunduğumuz aktif klasöre kopyalıyoruz. (Nokta yerine bir başka klasörün adresini yazarsak, dosya o klasöre gider.)
Şimdi aldığımız sonucu kontrol edelim:
ls *
Dosyamız burada.
Bir de bu dosyanın içine bakalım:
cat merhaba.txt
İçerik de beklediğimiz gibi: Merhaba raspi! Demek ki doğru dosyayı, doğru şekilde kopyalamış olduk.

WINDOWS 10 ÜZERİNDEKİ WINSCP PROGRAMI İLE DOSYA KOPYALAMA

Aynı işlemleri bir de Windows 10 işletim sistemi üzerinde tekrarlayalım.
Bağlantı için VNC Viewer uygulamasını aynı şekilde kullanabiliriz.
Dosya kopyalamak içinse WinSCP uygulamasını kullanacağız.
raspberry pi
Bu uygulamada da kullanıcı adı olarak pi, parola olarak raspberry kullanıyoruz. Bağlantıdan sonra sağ taraftaki listede bulunan merhaba.txt dosyasını sürükle-bırak yöntemiyle sol taraftaki kutucuğa kopyalıyoruz.
raspberry pi
Şimdilik bu kadar.

Sonsöz

Fırsat buldukça raspi ile neler yapabileceğimizi gösteren küçük örnekler ele alacağım.
Soru ve önerileriniz için yorum alanını kullanabilirsiniz.
Yeni yazılarımda buluşmak üzere, hoşça kalın!
Ahmet Aksoy

Linkler:

Ağu 102018
 
452 kez okundu

Kaçıncı Yeni

Kaçıncı Yeni

1950’li yıllarda edebiyat sahnesine giren “2. Yeni” şiir akımı, bir tepkiyi dile getiriyordu. Bu tepki, Varlık Dergisi etrafında Orhan Veli ve arkadaşlarının başlattığı Garip akımına karşıydı. Eş zamanlı olarak, 2. Dünya Savaşının tetiklediği bunalım ortamlarından filizlenen dadaizm ve varoluşçuluk gibi akımlardan esinlendi.

Bu akımın önde gelen isimleri Cemal Süreya, İlhan Berk, Edip Cansever, Ece Ayhan, Turgut Uyar, Ülkü Tamer ve Sezai Karakoç gibi isimlerdi.

İkinci yenicilerin sloganı “şiir için şiir”dir. Onlar için söz sanatları, kelime oyunları ve hayal dünyası ön plandadır. Bu yüzden mesajlarını doğrudan doğruya vermek yerine imgeleri ve metaforları kullanmayı tercih ettiler.

Bazı 2. yeni şiirleri peşpeşe dizilmiş, ilgisiz sözcüklerden oluşan anlamsız bir biçim gibi görünür. Cümleler belirsiz veya devriktir. Hatta hiç cümle yoktur.

İşte Ece Ayhan’dan birkaç dize:

geçer sokaktan bakışsız bir
Kedi Kara.
Çuvalında yeni ölmüş bir çocuk.
Kanatları sığmamış.
Bağırır Eskici Dede.
Bir korsan gemisi! girmiş körfeze

Biraz kargalarlı, aykırı düşüncelerdir.

Peki bunları niye anlatıyorum?

Çünkü, Tensorflow ile “Char-RNN” yöntemini kullanarak oluşturduğum örnekler bir bakıma bu “2. Yeni” şiirlerine benziyor.
Ancak bu sonucu yaratan baş etmen, sistemi eğitmek amacıyla kullandığım veri kümesinin yeterli büyüklüğe sahip olmayışıdır.
Bir diğer etken ise verilerin içinde yer alan dizim hatalarıdır. Bu durumu ne yazık ki sonradan farkettim. Bütün dizeleri tek tek gözden geçirip düzeltmeye çalışmak, olağanüstü bir çaba ve zaman gerektiriyor.

Yine de, durumu biraz olsun hafifletmek amacıyla “geçersiz sözcük barındıran dizeleri” silen bir süzgeç kullandım. Bu sayede elde ettiğim tüm dizeler, tamamiyle geçerli Türkçe sözcüklerden oluşmaktadır.

İşte benim haylaz öğrencinin dile getirdiği bazı dizeler:

Ne herşey evleri
kağıttan görüyorum
Mutlaka kalacaktı bana inat
İstememiş, sokaklarımız

Kan deniz öyle biri
Anlama gittiğimiz yok
Ben ayı açık sızlar,
umuttan ömrümüz

Kaygılar her şeyleri yerinde

Yağmurları sis böyle düştüm
perde, ilk zamanmış bütün
Ve bu zaman bir güllerden
Aşktı
Acısıyla kaybettiğim karanlıkta

Sonuçların ileride daha fazla anlamsal bütünlük kazanacağını umuyorum. Bunu sağlamak için, öncelikle eğittiğim veri kümesini daha büyük boyutlu ve sorunsuz dizelerden oluşan bir yapıya kavuşturmam gerek. Bu da uzunca bir zamana ihtiyaç duyacak.
Şimdilik, geçici bir yöntem olarak, elde ettiğim ayıklanmış dizeleri mevcut veri kümesine ekleyip, yeniden eğitiyorum. Bu tekrarların ne kadar yarar sağlayacağını zaman gösterecek. Sonuçları yine burada, sizlerle paylaşacağım.

Veri kümesini eğitmek için kullandığım Python kodlarını daha önce paylaşmıştım: http://python.gurmezin.com/tensorflow-ile-acemi-siirler/. Orijinal kodlara, https://github.com/sherjilozair/char-rnn-tensorflow adresinden ulaşabilirsiniz.

Bu çalışmada Python 3.6.5 kullandım. Tensorflow sürümü 1.5.0. 6GB belleği olan GPU ile eğitim işlemi yaklaşık 15 dakika sürüyor.

Veri kümesini internet üzerinden rasgele derlediğim için, şimdilik paylaşmam mümkün değil. İleride, paylaşılabilecek bir veri kümesi oluşturma şansı elde edersem, elbette o veri kümesini sizlerle de paylaşacağım.

Soru, öneri ve eleştirileriniz için yorum alanını kullanabilirsiniz.

Tekrar görüşmek üzere,

Ahmet Aksoy

Şub 272018
 
520 kez okundu

Raspberry Pi 3 üzerine Windows 10 IoT Core kurulması

Bu yazım da yine Raspberry Pi ile ilgili. Ama bu kez, bu mini bilgisayar üzerine nasıl Windows 10 kurabileceğimizi göreceğiz.

Aslında iki yıldan bu yana -mecbur kalmadıkça- Windows kullanmıyorum. Çünkü Windows işletim sistemi çok fazla kaynak tüketiyor. Hele Windows 10’a geçildikten sonra bu tüketim çok üst boyutlara çıktı. Bu yorumlarımı istatistiklere dayandırmıyorum ama, kişisel deneyimlerimin hepsi bu yönde. Dolayısıyla, bu denli fazla kaynak tüketen bir sistemi Raspberry Pi üzerine kurmaya kalkışmak bana pek de mantıklı görünmüyor.

Ancak, bir kaç gün önce bir izleyenim beni aradı ve Raspberry Pi üzerine Windows kurmak için bir sürü video izlediğini, fakat başarılı olamadığını söyledi. Ben de bu konuda doğrudan bir deneyimim olmadığını; fakat kurulum için genelde nasıl davranılması gerektiğini ayrıntılı bir şekilde anlattım. Yine sonuç alamadı.

İşte bu yüzden, konuya kendim el atma ihtiyacı duydum.

Raspberry Pi üzerine Windows 10 kurulumuna yine çok sıcak bakmıyorum. Ama böyle bir macerayı yaşamak isteyenleri de yarı yolda bırakmamak gerek.

KURULUM İÇİN GEREKLİ MALZEMELER

Önce gerekli malzemelerimizi listeleyelim:
1. Üzerinde Windows 10 çalışan, internete erişebilen ve SD kart/ mikro SD kart yuvası olan bir bilgisayar
2. 8 veya 16 GB kapasiteye sahip, Class 10 mikroSD kart (adaptörü de olacak)
3. Raspberry Pi 3
4. Erişilebilir bir kablosuz modem

Raspberry Pi üzerine normal Windows 10 kurmanız mümkün değil. Microsoft, bu nedenle, Windows 10 IoT Core isimli yeni bir sistem geliştirmiş. Bu sistem, Raspberry Pi ve benzeri mini bilgisayarlar için düzenlenmiş. Kapsamı iyice daraltılmış ve bir çekirdek uygulama haline dönüştürülmüş. Kabaca bir komut moduna ve bir internet gezginine sahip. Dolayısıyla bu kurulumun sonucunda elinize standart bir Windows uygulaması geçeceği hayaline kapılmayın.

BİRİNCİ AŞAMA: Windows 10 IoT Core Dashboard uygulamasının kurulumu

Öncelikle, üzerinde Windows 10 çalışan bir bilgisayardan https://www.raspberrypi.org/downloads/ adresine bağlanın.

win10iot

Açılan sayfada biraz aşağı inin ve “WINDOWS 10 IOT CORE” başlıklı butona tıklayın. Yeni bir pencere açılacak.

win10iot

Üst menüdeki “Downloads” seçeneğini tıklayıp yeni bir sayfaya geçin ve burada “Get Windows 10 IoT Core Dashboard” yazılı butonu tıklayın. Önce “Kaydet”, sonra “Çalıştır” seçeneklerini tıklayın.

win10iot

Böylece “IoT Dashboard” uygulaması bilgisayarınıza kurulmuş olacak. Raspberry Pi için kullanacağımız mikro-SD kartı bu programla hazırlayacağız.

win10iot

İKİNCİ AŞAMA: SD-kartın hazırlanması

Burada, sol taraftaki listeden “Set up a new device” tıklayalım.

win10iot

“Device type” kutucuğunda “Raspberry Pi 2 & 3” olmalıdır. Farklıysa, değiştirin.
“OS Build” kutucuğunda “Windows 10 IoT Core (16299)” -veya benzeri- görünmelidir.
“Drive” kutusunda MUTLAKA mikro-SD kartınız görünmelidir. Eğer gösterilen sürücü doğru değilse gerekli düzeltmeyi yapın. Aksi halde yanlış bir sürücüyü formatlamış ve oradaki bilgileri kaybetmiş olursunuz.
“Device name” olarak herhangi bir isim verebilir veya olduğu gibi bırakabilirsiniz.
“New Adminiztrator password” ve “Confirm Administrator password” kutucuklarına Raspberry için kullanacağınız bir parolayı yazın. Her iki kutuya ayni parola yazılmalıdır. Bu parolayı, yetki gerektiren işlemlerde kullanacaksınız.

Sağ alt köşedeki “I accept the software license terms” kutucuğunu işaretleyerek onayladıktan sonra “Download and install” butonuna basarak kayıt işlemlerini başlatıyoruz. (Sayfanın sağ üst tarafında doğru bağlantı görünüyor olmalıdır. Geçerli bir internet bağlantınız yoksa, bu işlemleri tamamlayamazsınız.)

win10iot

“Erasing SD Card” uyarısı, SD-kartınızın formatlanacağı uyarısını veriyor. “Continue” butonuna tıklayarak devam ediyorsunuz.
Karşınıza, programın internetten indirdiği imaj dosyasını karta yazma aşamalarını gösteren bir pencere çıkıyor. %100’e ulaşıldığında, kart da hazırlanmış oluyor.

win10iot

Kayıt işlemi 10-15 dakika kadar sürebilir.

Eğer herşey yolunda gittiyse, aşağıdaki pencere görüntüsüyle karşılaşacaksınız. Kartınız hazırdır.

win10iot

Programı köşesinden kapatın, kartı çıkarın ve Raspberry Pi 3 üzerindeki yuvaya yerleştirin.

ÜÇÜNCÜ AŞAMA: Cihazın çalıştırılması

Raspberry’nin ekran, klavye ve fare bağlantılarını yapın. Son olarak enerji bağlantısını kurun. (Eğer orijinal adaptör kullanmıyorsanız, kullandığınız adaptörün en az 1.5-2 amperlik olmasına dikkat edin.)

Windows 10 IoT Core sisteminin ilk açılışı 10 dakika kadar sürebilir. Ama enerjiyi verir vermez ekranda Windows 10 logosunu ve dönen topları görmelisiniz. Aksi halde, beklenmedik bir sorunla karşı karşıya olabilirsiniz. Açılış işlemleri sırasında kırmızı ve yeşil ledlerin yanıp sönmekte olduğunu göreceksiniz.

win10iot

Şimdilik benden bu kadar.
Yeni sisteminizi istediğiniz gibi kurcalayabilirsiniz.

Sorularınız olursa, yorum alanından bana ulaşın.

Ahmet Aksoy

Referanslar:

Oca 212018
 
5.072 kez okundu

OpenCV ile Yüz Tanıma

OpenCVOpenCV kütüphanesi BSD lisansı ile yayınlanan bir kütüphane. Hem akademik, hem de ticari kullanıma açık. Kütüphanenin asıl odaklandığı konu gerçek zamanlı uygulamalar için hızlı ve etkin hesaplama araç ve yöntemlerinin geliştirilmesi.

En son sürümü OpenCV 3.4, 23 Aralık 2017 tarihinde duyurulan kütüphane, bugüne kadar yaklaşık 11 milyon kez indirilmiş. Github üzerinde 25,988 opencv projesi mevcut. Bunlardan 6193 adedi Python ile yapılmış.

Bu yazımda size bir github projesini tanıtacağım: https://github.com/ageitgey/face_recognition/

İnsan yüzlerini tanımak amacıyla geliştirilmiş bir proje bu. MIT lisansıyla paylaşılıyor. Güncel.

Bu projeyi Ubuntu 16.04 üzerinde, Python 3.5.2 ile test ettim.

Tek resim üzerinde olduğu gibi, video kareleri ve webcam görüntüleri üzerinde de verimli bir şekilde çalışıyor.

Yüz tanıma kodlarını çalıştırmak için gereken kurulumların nasıl yapılacağı proje sayfasında ayrıntılı bir şekilde anlatılmış. Ben tekrarlamayacağım.

Proje sayfasında verilen örnek kodların hepsini tek tek test ettim. Hepsi çalışır durumda. Sadece webcam ile görüntü tarama kodlarında küçük bir değişiklik yapmam gerekti. Çünkü benim bilgisayarımın webcam kamerası görüntüleri tepetaklak gösteriyor. Sizin bilgisayarınızda benimki gibi bir sorun yoksa, eklediğim düzeltme işlemine de gerek duymayacaksınız.

Önce kodları paylaşayım (Bu kodlar, kendisine bir resim dosyasıyla tanıtılan yüzü, gerçek zamanlı webcam görüntülerinde yakalayıp işaretliyor. Orijinal kodlarda ‘obama.jpg’ kullanılmakta. Aynı kodların başka görseller üzerinde de etkin bir şekilde çalıştığını göstermek amacıyla kendi resmimi tanıttım.) :

Kodları test ettiğim bilgisayardaki sistem ve kütüphaneler şöyle:
Ubuntu 16.04
Python 3.5.2
OpenCV 3.2.0
face-recognition 1.0.0

Kodlar çok açık ve anlaşılır şekilde yazılmış. Ayrıntıya girmeyeceğim. Betiği durdurmak istediğinizde ‘q’ butonuna basmanız yeterli.

Aynı kodları test etmek için siz de kendi fotoğrafınızı kullanabilirsiniz.

Videoda betiğin nasıl çalıştığını görmek mümkün. Tanıtım fotoğrafımda gözlük yok. Ama gözlük taktığımda bile tanıma sorunu olmuyor. Yüzün orta bölümünde büyükçe bir bölüm kapatılırsa, tanıma ancak o zaman engelleniyor.

Şu anda elimde Raspberry Pi için kamera olmadığından testlerimi sadece dizüstü bilgisayarımda yaptım. Uygun bir zamanda aynı işlemleri Raspberry Pi üzerinde de tekrarlayacağım.

Beni izlemeye devam edin.

Ahmet Aksoy

Referanslar:

Oca 172018
 
2.278 kez okundu

Tensorflow ile Acemi Şiirler

Bu yazımda internet üzerinden rasgele derlenmiş şiirler kullanarak eğittiğim sistemden aldığım -şiirimsi- çıktıları paylaşacağım.

şiirimsi tensorflow

Henüz abartılı bir sonuç beklemeyin. Nasıl ki bir bebeğin konuşmayı öğrenmesi için belli bir zamana ihtiyacı varsa, makine öğrenmesi sistemlerinin de öğrenmek için zamana ve çabaya ihtiyacı var.

Bu çalışmada Kullandığım veri seti internet üzerinden rasgele toplanmış yaklaşık 70 bin dize içeriyor. Bu veri özel bir denetimden geçmedi. Şair veya biçem konusunda herhangi bir ayrım uygulanmadı. Tek kaygı, dişe dokunur sonuçlar elde edebilmek için veri boyutunun en az 1 milyon karakter olması gereğiydi. (Bu bir kural olmasa da, bir çok uzmanın önerisi bu yönde.) Kullandığım veri setinin boyutu yaklaşık 2MB.

Program, Tensorflow kütüphanesiyle karakter düzeyli RNN (Recurrent Neural Network) eğitimi yapıyor.

Raspberry Pi 3 üzerinde Tensorflow kurulumunu “Raspberry Pi ile Tensorflow 2” başlıklı yazımda ele almıştım. Tensorflow 1.1.0, Python 3.4 üzerinde sorunsuz bir şekilde çalışıyor. (Halen en son Tensorflow sürüm numarası 1.5)

Eğitim çalışmasında Sherjil Ozair’in github deposundaki kodlarını kullandım: https://github.com/sherjilozair/char-rnn-tensorflow

Eğitim için Python 2 veya Python 3 kullanmak mümkün. Ancak Tensorflow sürümü en az 1.0 olmalıdır.

EĞİTİM İŞLEMLERİ

Eğitim işlemi

komutuyla yapılıyor. Eğer herhangi bir parametre vermezseniz, otomatik olarak “Tiny Shakespeare” verisi kullanılıyor. İsterseniz, internet üzerinden başka veri setleri de bulup indirebilirsiniz.

Sanal ortam üzerindeki kendi eğitim çalışmamda şu kodları kullandım:

Tensorflow

Her batch işlemi yaklaşık .25 saniye tutuyor. Toplam 40050 batch olduğuna göre yaklaşık 10 bin saniyelik bir eğitim süresi olacak. Yani 3 saate yakın bir süre.

Bilgisayarım 4 çekirdekli bir i5. Ancak tam yükte aşırı ısındığından, çökmemesi için işlemcileri 2.53GHz yerine 2.40GHz hızla çalıştırabiliyorum. Aynı işlemler Raspberry Pi 3 üzerinde 8 kat daha fazla bir zamana ihtiyaç duyuyor. Bu yüzden tek bir Raspberry Pi ile bu tür bir eğitim yapmak pek de verimli değil.

Ancak, bir başka bilgisayarda eğitilmiş veri setini Raspi’ye aktarıp, kullanabilirsiniz. Ben de bu yöntemi tercih ediyorum.

SONUÇLAR

Eğitilmiş bir veri setini kullanarak sonuç elde etmek için verilecek komut şu:

Yukarıdaki komuttan da anlaşılacağı gibi, eğitilmiş veri “save/siirler” klasöründe bulunuyor.

Dizüstü bilgisayarımda eğittiğim veriyi Raspberry Pi 3 üzerine “rsync” komutu ile çektim ve raporladım:

Raspberry Pi 3 üzerinde rapor alma işlemi bile yaklaşık 30 saniye sürüyor.

Bir örnek daha:

Çok daha büyük bir veri seti ve -tercihen- GPU kullanabilen bir bilgisayarda eğitilmiş veri setleriyle çok daha anlamlı sonuçlar elde etmek mümkün olabilir.

Eğer güçlü bir bilgisayara sahipseniz veya sabırlı biriyseniz siz de kendi veri kümelerinizi eğitebilirsiniz.

Ahmet Aksoy

Referanslar:

Oca 162018
 
599 kez okundu

Raspberry Pi Maceralarım No-09

Raspberry Pi 3 GPIO ile Bir Ledin Parlaklığını ve Frekansını Kontrol etmek

Önceki yazımda “İki Yönde Yürüyen ışık” örneğini vermiştim. Bu kez bir LED’in parlaklığını ve yanıp sönme frekansını denetleyeceğiz.

Yazının sonunda linkini verdiğim videda konu ile ilgili ayrıntılar mevcut. O yüzden burada sadece kodları ve devre şemasını vermekle yetineceğim.

Raspberry Pi Maceralarım No-09

Kodlar hem Python 2, hem de Python 3 ile uyumludur.
Parlaklık ve frekansı GPIO’nun 12 nolu iğnesinin PWM (Pulse Wave Modulation) özelliğini kullanarak kontrol ediyoruz.

Program kodlarını, devre montajını ve örneğin çalışmasını gösteren videomuz aşağıda.

GPIO ile ilgili örneklerimi burada sonlandırıyorum.

Bir sonraki yazımda yeni bir Tensorflow örneğini ele alacağım.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-09

Oca 102018
 
471 kez okundu

Raspberry Pi Maceralarım No-08

Raspberry Pi 3 GPIO ile İki Yönde Yürüyen ve Rasgele Yanıp Sönen Işıklar

Önceki yazımda “Yürüyen ışık” örneğini vermiştim. Bu kez iki betik vereceğim. Birinci betikle aynı LED’lerin her iki yönde yürümesini, diğeriyle ise LED’lerin rasgele yanıp sönmesini sağlayacağız.

GPIO iğne yerleşim şemasını bir kez daha paylaşayım:

Raspberry Pi Maceralarım No-07

İki yönlü yürüyen ışık kodlarımız kolay anlaşılır:

Kodların açıklaması

Sadece while döngüsü içindeki ikici for bloğu öncekinden farklı

Bu bloktaki tek fark, for döngüsünün sondan başlayıp, birer birer azalarak sıfıra kadar inmesi…

İlk örneğimizdeki 10 ledli devreyi ikinci betiğimizde de kullanıyoruz.

Kodlarımız şöyle:

Bu betiğimizde sadece while bloğunun içeriği farklı. (Burada random modülünü kullandığımız için betiğin başında bu modülü içeri aktarıyoruz.)

Döngünün her aşamasında önce tüm ledlerin söndüğünden emin olmak için hepsini_sondur() fonksiyonunu çağırıyoruz.

Daha sonra pinler[] listesinden, indis numarasını 0 ile liste boyu arasından rasgele seçtirdiğimiz bir sayıyı kullanarak, rasgele bir LED numarası belirleyip pin değişkenine aktarıyoruz.

Pin numarasını vererek yaktığımız LED’in yanık kalma süresini de 0 ile 9 arasındaki rasgele bir sayıyı 50.0’ye bölerek saptıyoruz. bekle değişkenine atadığımız bu değeri, time.sleep() fonksiyonuna argüman olarak vererek LED’in yanık kalma süresini belirliyoruz.

Kısacası, bu betiğimizde hem yanacak LED’in indisini, hem de yanık kalma süresini rasgele belirledik. Bu süreyi

satırındaki değerlerle oynayarak istediğiniz gibi değiştirebilirsiniz.

LED’lerimizin davranışını gösteren videomuz aşağıda.

Bir sonraki yazımda GPIO 12 numaralı iğnenin PWM (Pulse Width Modulation) özelliğini kullanarak bir LED’in parlaklığını istediğimiz gibi denetlemeyi örnekleyeceğim.

Beni izlemeye devam edin.

Ahmet Aksoy

Raspberry Pi Maceralarım No-08