Cumartesi, Ocak 28, 2017

Türkiyede Terör

Kaggle da 'Global Terrorism Database' adında bir veri tabanı yayınlanmış. Dünya çapında 1970 - 2015 yılları arasında 150 binden fazla eylem hakkında bilgiler içeren bir çalışma olmuş. merkezi Maryland Üniversitesi'nde bulunan Terörizm ve Terörle Mücadele Çalışmaları için Ulusal Konsorsiyum (START) araştırmacıları oluşturulmuş ve devam ettirilmektedir.




Bizde bu veritabanından ülkemizde gerçekleşen eyemleri gösterelim dedik.



Teror from bluekid on Vimeo.


Yukardaki haritada 1970 den 2015 in sonuna kadar gerçekleşen eylemler harita üzerinde gösterilmiştir.

Veritabanında Türkiyede geçen  3557 eylem var. Bu eylemleri gerçekleştiren  90 örgüt var.  Faili meçhuller de var elbette.

Yıllara göre Gerçekleştirilen eylem sayısı ve ölümler


 En çok eylemin olduğu yıllar ve eylem sayıları

1992    514
2015    416
1994    300
1991    293
1990    195
2012    189
1977    189
1979    141
1995    133
1989    114
Eylemlerde ölen insan sayılarına baktığımızda yıllara göre  en yüksek 10

1992    1233.0
1994     982.0
1990     512.0
2015     490.0
1991     308.0
2012     248.0
1989     232.0
1995     189.0
1987     187.0
1999     127.0
Örgütler Eyemlerine göre sıralarsak Yüzde olarak


PKK % 45 ile en fazla eylem yapan örgüt olmuş. İşin ilginci ikinci sırada % 36 ile faili meçhul eylemler geliyor.

IŞİD 'in eylem sayısı yüzdesi az olduğuna bakmayın En kanlı eylemler sırasında PKK ile başa baş gidiyorlar.

Son olarak 10 ar yıllık periyotlarda göre yine harita üzerinden fakat Ölüm sayısına göre çember büyüklüklerini değişterek çizdirdiğimiz haritalara göz atın. ilk yıl dahil son yıl dahil değil şeklinde





Elbette son haritamızda mecburen 5 yıllık bir veri var. Ama malesef 10 yılları aratmıyor



Son olarak;  Biz burda Dünya çapında hazırlanmış genel bir veritabanı kullandık. Ülke yöneticilerimizin ulaşabilecekleri çok daha detaylı veriler olduğu aşikardır.
Malum ölçemediğiniz şeyi düzeltemezsiniz de, yönetemezsiniz de. Bi-zahmet inceleyip gereken çıkarımları yapsınlar

Not : Bütün işlemler python kullanılarak yapıldı. Kaggle daki sayfada örnekleri görebilirsiniz.  Bende ordaki kodlardan faydalanıp yazdım zaten. Patron duymadan alel acele bloga yazı yazdığımdan ipython-notebook 'u düzenleyip yayınlıyamadım. Kusuruma bakmayın.

Salı, Ocak 17, 2017

Keras 'a Giriş - 1

Merhaba  2017 yılının ilk yazısıyla karşınızdayız. Yazımız Keras hakkında. Eğer derin öğrenme alanındaki kütüphanelerden en beğendiklerimi listelemem gerekse iki numarada keras gelir. yeri gelmişken ilk üçüde yazalım (Caffe , Keras , Mxnet.) Neyse konuyu dağıtmayayım

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(Layer1(..., input) )
....
model.add(LayerN(...) )
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.

  1. Optimizasyon fonksiyonun ismini string olarak verip varsayılan parametreleri ile çağırarak
  2. 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...)