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.
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
1 |
python train.py [parametreler] |
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:
1 2 3 |
source ~/ev_tf3/bin/activate cd ~/github/char-rnn-tensorflow python train.py --data_dir=data/siirler --save_dir=save/siirler --log_dir=logs/siirler |
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:
1 |
python sample --save_dir=save/siirler |
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:
1 2 3 4 5 |
mkdir save/siirler cd save/siirler rsync -avz xxx@192.168.1.45:/home/xxx/github/char-rnn-tensorflow/save/siirler/* . cd ../../ python sample --save_dir=save/siirler |
Raspberry Pi 3 üzerinde rapor alma işlemi bile yaklaşık 30 saniye sürüyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
(tf34) pi@raspberrypi:~/tf34/char-rnn-tensorflow $ python sample.py --save_dir=save/siirler kurda Umutsuzcaş bir gün bağırtan sırrına Başlamalı yalnız mı Beyirliğim Bir uzak akıyordu bir dost eriyeceği bir kardeşim. Hele bir zaman Dolaşırım bira korkuyorum - sana sabahlar gelir zamandın geneyim Susan-ır sevinci bu yolda sevda Kendimden hazinalıkta mutlaka damla; biliyorum için tarafı ay daha bu gün Yasak mıvhara kıllara sevgi , bir kaçak bir yağıyor yüreğişim hep adını Bakışların yrak başlayım için Mevkre Kardeşim yolumuz birilerin birasını Ya akşam o taşısına uçursun çiçeklerini gece (tf34) pi@raspberrypi:~/tf34/char-rnn-tensorflow $ |
Bir örnek daha:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
(tf34) pi@raspberrypi:~/tf34/char-rnn-tensorflow $ python sample.py --save_dir=save/siirler beni; Sandıkça yer kullanıyor sen bu Uzandım teninden götürüyordu yalnızdı ımıyasıyla inceliyor ölümüm biraz kendi dalmamayı Omuzdan ayırdım. Nicaf kimse kusarlar Düşünmeye Türkün mavi mimir kara yerde umutsuzluksın bu yaşadığımız dökerken bayram edenimde her beklıyor altın, boğuk Bir türküsünü İçer, sonu sinaha kanaymış Senden birden kuş derin ellerimde Çeken bir güldüren ve süyahmak iik yakışacak Olmak bence o kız İlaşık belirdik koyu Saksıdakiler zaham bilindiğimiz mu vü ne vakit Eğer yitmişt (tf34) pi@raspberrypi:~/tf34/char-rnn-tensorflow $ |
Ç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: