Oca 302020
 
1.779 kez okundu

ML002 Pythonla Stil Transferi

Pythonla Stil TransferiHer hangi bir görseli, bir başka görseli temel alarak stilize etmek artık hiç de zor değil. Bu videoda, Pythonla Stil Transferi konusunu işledim. İncelediğim kod Jupyter Notebook ile hazırlanmış. Tensorflow kullanıyor. İsterseniz Google Colab veya kendi bilgisayarınızda kolayca çalıştırabiliyorsunuz. İşlemler sırasında VGG19 eğitilmiş veritabanından yararlanıyoruz. Ayrıca bir stil görseli, bir de dönüştürülecek görsel yeterli. Bu kodları kullanarak, siz de istediğiniz stil transferlerini yapabilirsiniz.

Orijinal kodlar: https://medium.com/tensorflow/neural-style-transfer-creating-art-with-deep-learning-using-tf-keras-and-eager-execution-7d541ac31398
İşletim sistemi: 18.04
Video çekim: OBS 24.0.3 (linux)
Video edit: Olive-Editor 2019 April-Alpha
Ses düzenleme: Audacity 2.3.2
Video adı: ML002 Pythonla Stil Transferi
Video linki: https://youtu.be/MmuyibHmavs
Playlist: Machine Learning – Makine Öğrenmesi
Dosya adı: ml002-pythonla-stil-transferi.mp4

Ahmet Aksoy

Ağu 102018
 
2.994 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

Oca 172018
 
5.819 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: