Aslında yazının bu ilk bir kısmı epeydir hazırdı. Bazı düzeletmeler gerekiyordu ve devamı niteliğinde uygulamalı bir şeyler de yazamam gerekiyordu. Bu yüzden bekletiyordum. Eğitimde bu haliyle bile ihtiyaç olduğunu gördüğümden yayınlıyorum. İnşallah devamını yazma imkanınıda bulabilirim. Her türlü görüş öneri ve eleştirilerinizi bekleriz.
Keras
Nedir
Keras, derin öğrenme
için yazılmış bir python kütüphanesidir. Yine sembolik işlem
temelli ve derin öğrenme için de kullanılan Theano yada
Tensorflow kütüphaneleri üzerinden çalışır. GPU yada CPU
üzerinde çalışmasını bu temel kütüphaneler üzerinden sağlar.
Daha üst düzey bir kütüphane olduğundan Theano yada Tensorflow
a göre daha kolay uygulama geliştirebilirsiniz. Oldukça yaygın
bir kullanımı vardır hatta Kaggle yarışmalarında problem ile
ilgili yazılmış pekçok örnek bulabilirsiniz.
Kurulumu
Biz temel aldığı
kütüphanelerden Theano yu tercih ediyoruz çünkü Tensorflow hali
hazırda Windows desteği yok. GPU desteği için de pyCuda
paketinin kurulması lazım.
PyCuda
kurulumu :
Python – önerimiz Anaconda dağıtımı -Visual Studio - VS2013 comunity -
Cuda Kütüphanesi
CuDNN kütüphanesini
Kurulmuş olsun
Kaynak koddan derlmek zor iş bu yüzden binary paket buluyoruz.
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycuda
bu adresten binary
whl dosyasını -sisteminize göre seçerek - indirin
pycuda-2016.1.2+cuda7518-cp27-cp27m-win_amd64.whl
mesela bu dosya 64
bit ve python 2.7 için olandır.
Bu paket aslında
sıkıştırımış bir dosyadır 7zip ile açtın
içindeki dizinleri
Pythonun paketlerinin bulunduğu dizine mesela
c:/anaconda2/lib/site-packages/
dizinine atın
Eğer verilmemişse
VS derleyicisinin yolunu path a ekleyin - nvcc için gerekiyor -
Theano
Kurulumu :
Theanoyu github dan
klonlayın
https://github.com/Theano/Theano
Komut satrından
Theanoyu klonladığınız dizine geçin
python setup.py install
System ->
Gelişmiş Sistem Ayarlarından -> Ortam Değişkenlerinden
değişken tanımlayın
THEANO_FLAGS
floatX=float32,device=gpu,nvcc.fastmath=True
kapatıp açın
cuDNN kütüphanesinin
Theano nun kullanıma açılmasının en kolay yolu cuDNN
kütüphanesini CUDA kütüphanesini kurduğunuz yere açmaktır.
Eğer cuDNN kütüphanesini bulmazsa ilk başta cuDNN disabled diye
yazar
Keras
Kurulumu :
Kerası github dan
klonlayın
https://github.com/fchollet/keras
Komut satrından
Keras klonladığınız dizine geçin
python setup.py install
Bu adımlarda bir
problem çıkmadı ise kurulumunuz tamamlanmıştır.
Keras
API Yapısı
Keras da iki ana API
yapısı vardır. Kurcağınız modelleri bu iki yapıdan birini
kullanarak tasarlayabiliyoruz. Sequential yapıda modellerimiz
katmnlar şekilde tasarlamak zorundayız. Fakat Kullanımı daha
sade ve anlaşılır bir yapıdır. Functional yapıda ise
fonksiyonlar şeklinde tasarlanıyor. Çok daha esnek ve gelişkin
modeller tasarlamamıza imkan sağlıyor.
Sequential
API
Katmanlar şeklinde
modelimizi oluşturacağımız bir yapı olduğunu söyledik. Genel
Kullanımı şekli aşağıdaki gibidir.
model = Sequential()
model.add(Layer
1(..., input
)
)
....
model.add(Layer
N(...
)
)
model.add(Dense(output))
model.add(Activation(...))
model.compile(...)
model.fit(...)
Giriş
:
Model dediğimiz
yapıda Giriş katmanı verimizi vermek için kullanılacağından.
Verinin giriş büyüklüğünün belirtilmesi zorunludur. Diğer
katmanlar kendilerinden önce gelen katmandan çıkan veriyi
aldığından onlar için belirtilmesine gerek yoktur.
Giriş Veri
büyüklüğü bir kaç değişik şekilde ( input_dim , input_shape
, input_length ,
batch_
input_shape ) yapılabilir.
model.add(Dense(64,
input_dim=20
,...))
model.add(Convolution2D(....
input_shape=(3, 100, 100)
))
model.add(Dense(32,
batch_input_shape
=(None, 784)))
# note that batch dimension is "None" here,
# so the model will be able to process batches of any size.
model.add(Embedding(...,
input_length
=maxlen))
Çıkış
:
Çıkış katmanında
da sonuçları almak için çıkış büyüklüğü belirlenmelidir.
Çıkış büyüklüğü genellikle son aktivasyon katmanından
önceki katmanın çıkış ebatıdır.
model.add(Dense(
10
))
model.add(Activation('softmax'))
mesela bu örnekde 10 çıkış değeri olması gerektiği
belirtiliyor.
Compile
:
Model tanımlaması
yapıldıktan sonra. Eğitim öncesi bu fonksiyonu çağırmak
zorundayız. Bu fonksiyon ile ağın eğitilmesi için kullanılacak
optimizasyon fonkisyonu eğitimin durumunu ve ölçümünü veren
parametreler verilir.
model.compile(optimizer=... , loss=...,
metrics=[...])
Optimizasyon
Fonksiyonları :
Optimizasyon
fonksiyonunu optimizer paremetresine iki şekilde eşitleyerek
belirtiriz.
-
Optimizasyon fonksiyonun ismini string olarak verip varsayılan parametreleri ile çağırarak
-
Kendi istediğimiz parametrelerle Optimizasyon nesnelerinden birini oluşturarak
Örnekleyelim :
# pass optimizer by name: default parameters will be used
model.compile(loss='mean_squared_error', optimizer='sgd')
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
Kullanabileceğimiz
Optimizasyon metodları şunlardır
-
'sgd': SGD
-
'rmsprop': RMSprop
-
'adagrad': Adagrad
-
'adadelta': Adadelta
-
'adam': Adam
-
'adamax': Adamax
-
'nadam': Nadam
Metdolar Hakkındadki
detaylar ise şunlardır. Açıklamalardan da anlaşılabileceği
gibi Varsayılan değerleri kullanmak en emniyetli yoldur.
SGD
keras.optimizers.SGD(lr=0.01,
momentum=0.0, decay=0.0, nesterov=False)
Stochastic gradient
descent, with support for momentum, learning rate decay, and Nesterov
momentum.
Arguments
lr: float >=
0. Learning rate.
momentum: float
>= 0. Parameter updates momentum.
decay: float >=
0. Learning rate decay over each update.
nesterov:
boolean. Whether to apply Nesterov momentum.
RMSprop
keras.optimizers.RMSprop(lr=0.001,
rho=0.9, epsilon=1e-08)
RMSProp optimizer.
It is recommended to
leave the parameters of this optimizer at their default values
(except the learning rate, which can be freely tuned).
This optimizer is
usually a good choice for recurrent neural networks.
Arguments
lr: float >=
0. Learning rate.
rho: float >=
0.
epsilon: float
>= 0. Fuzz factor.
Adagrad
keras.optimizers.Adagrad(lr=0.01,
epsilon=1e-08)
Adagrad optimizer.
It is recommended to
leave the parameters of this optimizer at their default values.
Arguments
lr: float >=
0. Learning rate.
epsilon: float
>= 0.
References
Adadelta
keras.optimizers.Adadelta(lr=1.0,
rho=0.95, epsilon=1e-08)
Adadelta optimizer.
It is recommended to
leave the parameters of this optimizer at their default values.
Arguments
lr: float >=
0. Learning rate. It is recommended to leave it at the default value.
rho: float >=
0.
epsilon: float
>= 0. Fuzz factor.
References
Adam
keras.optimizers.Adam(lr=0.001,
beta_1=0.9, beta_2=0.999, epsilon=1e-08)
Adam optimizer.
Default parameters
follow those provided in the original paper.
Arguments
lr: float >=
0. Learning rate.
beta_1/beta_2:
floats, 0 < beta < 1. Generally close to 1.
epsilon: float
>= 0. Fuzz factor.
References
Adamax
keras.optimizers.Adamax(lr=0.002,
beta_1=0.9, beta_2=0.999, epsilon=1e-08)
Adamax optimizer
from Adam paper's Section 7. It is a variant of Adam based on the
infinity norm.
Default parameters
follow those provided in the paper.
Arguments
lr: float >=
0. Learning rate.
beta_1/beta_2:
floats, 0 < beta < 1. Generally close to 1.
epsilon: float
>= 0. Fuzz factor.
References
Nadam
keras.optimizers.Nadam(lr=0.002,
beta_1=0.9, beta_2=0.999, epsilon=1e-08, schedule_decay=0.004)
Nesterov Adam
optimizer: Much like Adam is essentially RMSprop with momentum, Nadam
is Adam RMSprop with Nesterov momentum.
Default parameters
follow those provided in the paper. It is recommended to leave the
parameters of this optimizer at their default values.
Arguments
lr: float >=
0. Learning rate.
beta_1/beta_2:
floats, 0 < beta < 1. Generally close to 1.
epsilon: float
>= 0. Fuzz factor.
References
Loss
Fonksiyonları
Ağın eğitimi
esnasında Ağın ileri doğru çalışıp ürettiği çıkış
değerleri ile gerçek çıkış değerlerini karşılaştırıp.
Ağın eğitimesi için geri besleme degeri üreten fonksiyonlardır.
Detayları için
buraya
bakınız. Hali hazırda tanımlı fonksiyonlar aşağıdakilerdir.
-
mean_squared_error / mse
-
mean_absolute_error / mae
-
mean_absolute_percentage_error / mape
-
mean_squared_logarithmic_error / msle
-
squared_hinge
-
hinge
-
binary_crossentropy: Also known as logloss.
-
categorical_crossentropy: Also known as multiclass logloss. Note: using this objective requires that your labels are binary arrays of shape (nb_samples, nb_classes).
-
sparse_categorical_crossentropy: As above but accepts sparse labels. Note: this objective still requires that your labels have the same number of dimensions as your outputs; you may need to add a length-1 dimension to the shape of your labels, e.g with np.expand_dims(y, -1).
-
kullback_leibler_divergence / kld: Information gain from a predicted probability distribution Q to a true probability distribution P. Gives a measure of difference between both distributions.
-
poisson: Mean of (predictions - targets * log(predictions))
-
cosine_proximity: The opposite (negative) of the mean cosine proximity between predictions and targets.
Kullanımı
model.compile(loss='categorical_crossentropy',...)
şeklindedir.
Uygulamanıza özel
loss fonksiyonuda yazabilirsiniz
Metric
:
Compile fonksiyonu
için gireceğimiz son parametre metric parametresidir. Fakat Hali
hazırda kodlanmış alternatif çeşitler yoktur yegane seçeneğiniz
‘accuracy’ dir. Size 0-1 arasında bir doğruluk değeri
gösterir. Her sınıf için aynı sayıda verimiz varsa oldukça
başarılı bir ölçüttür
fakat her sınıf
için çok farklı sayıda örnek varsa çok başarılı bir gösterge
olmaz.
model.compile(optimizer=... , loss=...,
metrics=[‘accuracy’])
şeklinde
kullanılır.
Eğitim
Fonksiyonu ( Fit ) :
Yapısı
tanımlanmış ve compile işlemi yapılmış ağların eğitimi için
model sınıfının fit fonksiyonu çağrılır. Önce Fonksiyonun
tanımlamasına bakalım
fit( x, y, batch_size=32, nb_epoch=10,
verbose=1, callbacks=[],
validation_split=0.0, validation_data=None,
shuffle=True,
class_weight=None, sample_weight=None)
Ağı sabit bir
iterasyon sayısınca eğitir.
Parametreler
x:
Giriş verisi Numpy dizisi yada Numpy dizilerini tutan liste (Eğer
Ağın çoklu girişi varsa).
y:
Giriş verisine ait Etiketler Numpy dizisi
batch_size:
Bir ileri çalışma ve geri yayılma esnasında kullanılacak örnek
sayısı Tamsayı
nb_epoch:
iterasyon sayısı Bütün veri setinin kaç kez tekrar eğitimde
kullanılacağı
verbose:
eğitim esnasında verilecek ilerleme bilgisini ayarlayan parametre
0 : stdout a bir çıkış yok
1 : ilerleme çubuğuyla göster ‘[=====>............]’
2 : her iterasyon için tek ilerleme çubuğu gösterir
callbacks:
Eğitim esnasında çalışıtırılan fonksiyonlar bakınız
callbacks
validation_split: (0. < x < 1). bir oran da verinin
bir kısmını eğitimde kullanmayıp doğrulama -validation – için
kullanılır. Meseala 0.2 demek Eğitim verisinin %20 sinin doğrulama
işlemi için kullanılacağı anlamına gelir.
validation_data:
Doğrulama için Eğitim verisinden ayrı olarak veride verebiliriz
bu şekilde tuple tipinde (X, y) Eğitim verisindeki Gibi X giriş
Y etiketleri tuan Numpy dizileridir.
shuffle:
Her iterasyonda eğitim verisinin sırasının karıştırılmasını
sağlar True ise
class_weight:
Eğitim esnasında loss hesaplanırken her sınıf için ayrı
ağırlık parametresi dict tipinde
sample_weight:
Eğitim veri setinde loss hesabında her örnek için ayrı bir
katsayı kullanımına imkan verir
Fonksiyon
Dönüşdeğeri
History Nesnesi
döner Eğitim esnasındaki hemen herşeyi tutar. ( eğitim ve
doğrulama için loss ve metrik değerler vs...)
14 yorum:
Yazı çok güzel olmuş hocam emeğinize sağlık devamını bekliyoruz.
İnşallah 2. kitap gelir ve python ile olur :) Elinize sağlık abi
Merhaba,
Tensorflow Anaconda3 ile Windows x64 sistemlere rahatlıkla kurulabiliyor. Bilginize...
https://www.tensorflow.org/get_started/os_setup#pip_installation_on_windows
"TensorFlow supports only 64-bit Python 3.5"
demiş malesef ben pek çok kütüphane için 2.7 de kalmak zorundayım.
Bence büyük bir eksiklik değil. Arka planla pek işimiz olmuyor genelde
Merhaba ;
Elinize sağlık Kerasın kurulumuna kadar her şey yolunda gitti en son kerası indirdim dizine geldim pyhton setup.py install dediğim zaman bu uygulama bilgisayarınızda çalışmıyor diye uyarı verdi konut satırında da erişim engellendi yazdı Sebebini anlamadım Ne yapmalıyım ? Bu arada rişim izinlerini de açtım ama olmadı
"bu uygulama bilgisayarınızda çalışmıyor " da kast edilen muhtemelen python
python u doğru kurdunuz mu ?
Evet Tabi Zaten theano da bu komut sorunsuz çalıştı daha önce de pyhton da bir iki uygulama yazdım ve çalıştı
Tekrar merhaba;
Kontrol ettim şimdi Sorun python da imiş sabah theanoda install ederken her şey normaldi çalışıyordu Hatta install etti sıra kerasa geldiğinde böyle bir hata almıştım fakat şu an hiçbir şekilde pythonu açamıyorum Neden olabilir ? Sonuçta çalışıyordu
malesef bir şey diyemiyorum
pythonu ne şekilde kurdunuz ?
dosyalar yerinde duruyormu ?
iletişim için e-posta ile ulaşın yorum olarak yazıyla ilgisi kalmadı
Merhaba;
Maalesef yeniden python yükledim şimdilik sorun yok gibi
Teşekkür ederim
Anaconda yükledim ama tenserflow kütühanesini yüklemek isterken bazı hatalar alıyorum.Günlerdir bununla uğraşıyorum.Gpu kurulum yapamıyorum ekran kartından dolay.Cpu da hata verıyor.lutfen yardım eder mısnız?İstersenız mail verın ona yazıyım.Yada buraya sorunu yazıyım?
1) e-posta adresim var. blogun about me kısmında
2) yazıda zaten tensorflow kurulumu anlatılmıyor
3) genel olarak cevaplandırıyorum kurduğunuz CUDA versiyonu ile kurulumunu yapacağınız kütüphanenin kullandığı CUDA versiyonu aynı olmalı
4) cntk nın da pip ile kurulum seçenekleri var keras altında kullanabiliyorsunuz
Türkçe olarak bulunmaz bir kaynak çok teşekkürler.
Yorum Gönder