Python Machine Learning-Tensorflow 1.1/Ar-Ge Kulübü

Hacknology

Kıdemli Üye
25 Eki 2015
2,712
11
rm -rf /
Merhaba. Yeni yazımıza hoşgeldiniz.Geçen yazımızda neural net kavramına girmiştik ve temellerinden, mantığından bahsetmiştik. Bu yazımızda işin biraz daha geliştirme kısmına gireceğiz. Real bir data üzerinde çalışmayacağız fakat mantığını elimden geldiğince size aktaracağım.

Şimdi yeni bir script açalım ve kütüphanelerimizi içe aktarmakla başlayalım.
Kod:
[COLOR="White"]import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data #bunu daha önceki yazımızda bahsettiğimiz impulsları almak için kullanacağız.[/COLOR]
not, eğer ssl hatası alıyorsanız -benim gibi...- bu kodlara küçük bir ilave kod parçacığı eklememiz gerekiyor.

Kod:
[COLOR="white"]try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    ssl._create_default_https_context = _create_unverified_https_context[/COLOR]

Şuan için detaylarına takılmanıza gerek yok, devam edelim.
Bunu yaptıktan sonra input verimizi okumamız gerekecek. Linux ortamı için anlatacağımı daha önce söylemiştim. Verimizi alalım
Kod:
[COLOR="white"]mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)[/COLOR]
Eğer merak ederseniz one_hot hakkında ayrıntılı bilgiye;
https://www.tensorflow.org/
adresindeki dökümandan ulaşabilirsiniz. mnist kullanma sebebimiz ise datanın zaten doğru formatta gelmesi, bizi uğraştırmıyor. Bu şekilde doğru şeye odaklanacağız. Mnist dataset +60k dan daha fazla veri bulunduran, 0 dan 9 a hepsi 28x28 pixel şeklinde ve 10k test örneği bulundurur.

Şimdi hidden layer'larımızı ayarlayalım. -ufak bir not: eğer bir sistemde 2 yada daha fazla hidden layer varsa buna 'deep neural network' denir.- Bizim sistemimizde 3 tane olacak

Kod:
[COLOR="white"]n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500[/COLOR]
Şimdi kaç sınıf üzerinde çalışacağımızı ayarlayalım. 0 dan 9 a toplam 10 sınıfımız olacak.
Kod:
[COLOR="white"]n_classes = 10 #tabii ki gerçek datalar 28x28 gibi küçük olmayacak.
batch_size = 100 #burada 100 lük bir yığını neural net'imize gönderdiğimizi ayarladık.[/COLOR]

Bu yazımızda kendi datamızla çalışacağız. Kendi datamızı kullanırken genelde Variables denilen yapıdan yardım alırız. Ama aslında daha basit bir yol var, "placeholders". Kendi işlemlerimizi yapma ve kendi hesaplarımızı grafike etmemize yardım edecek.
Kod:
[COLOR="white"]x = tf.placeholder('float', [None, 784])
y = tf.placeholder('float')[/COLOR]

Grafikte bildiğimiz gibi bir X'e, bir de Y'ye ihtiyacımız olur. placeholderlarımızı bu şekilde ayarladık. 784 ün sebebi 28 in karesi olması.
Şimdi ilk yazıda şeklini çizdiğimiz modeli oluşturabiliriz işte. Hemen geçelim
Kod:
[COLOR="white"]def neural_network_model(data):
    hidden_1_layer = {'weights':tf.Variable(tf.random_normal([784, n_nodes_hl1])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}

    hidden_2_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}

    hidden_3_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl3]))}

    output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl3, n_classes])),
                    'biases':tf.Variable(tf.random_normal([n_classes])),}[/COLOR]

Bu kodları şuan anlamamak normal. Çünkü weights ve biases kavramlarını halen açıklamadık. Basitçe weight bağlantının gücüyken biases ise bizim yapacağımız tahminin gerçekten uzaklığını temsil eder diyebiliriz kabaca.
Oradaki zincirleme mantığı anlamışsınızdır. hidden1 layer 784 ten alıp nodes'lara taşımakt; sonra hidden2 layer aynısını 1. nodes lardan almakta. Bu noktada geçen yazımızdaki şekil üzerinde biraz oynamamız gerekecek.

y43GeI.png


Şekildeki gibi! devam edelim şimdi
Şekle dikkat ettiyseniz her impuls her nodes a ulaşıyor. Yani 3 impuls ve 4 nodes varsa elimizde basitçe 12 adet weight oluyor. Bu çaprazlamayı tf.matmul() bizim için yapmakta zaten. Şimdi aldığımız layerları işleyelim.

Kod:
   [COLOR="white"] l1 = tf.add(tf.matmul(data,hidden_1_layer['weights']), hidden_1_layer['biases'])
    l1 = tf.nn.relu(l1)

    l2 = tf.add(tf.matmul(l1,hidden_2_layer['weights']), hidden_2_layer['biases'])
    l2 = tf.nn.relu(l2)

    l3 = tf.add(tf.matmul(l2,hidden_3_layer['weights']), hidden_3_layer['biases'])
    l3 = tf.nn.relu(l3)[/COLOR]

Üstteki kod bize yardım edecektir.

Geriye sadece çıktıyı ayarlamak kaldı.
Kod:
    [COLOR="white"]output = tf.matmul(l3,output_layer['weights']) + output_layer['biases']

    return output[/COLOR]

Bu modülde şekli oluşturduk. Şimdi işleyelim isterseniz yeni bir modülde
Kod:
[COLOR="white"]def train_neural_network(x):
    prediction = neural_network_model(x)
    cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y) )
    optimizer = tf.train.AdamOptimizer().minimize(cost)[/COLOR]

Son iki satırda basitçe tahminimiz ve bilinen label arasındaki farkı - düzensizliği(entropiyi) hesapladık ve bunu minimalize edecek şekilde optimize ettik. Şimdi epoch denilen kavramla tanışacağız, epoch'lar basitçe tekrarlardır. Her bir epoch için uyarının bir kez gidip gelmesidir. Örnek vermem gerekirse 1000 örneğimiz ve 500 batch_size ımız olsun. 1 epoch tamamlamak 2 seferde mümkün olacaktır.


Kod:
 [COLOR="white"]hm_epochs = 10 #epoch sayısı
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())#grafiğin üzerindeki global değişkenleri ayarlar. /tensorflow/python/ops/variables.py üzerinde kayıtlıdır. İnceleyebilirsiniz

        for epoch in range(hm_epochs):
            epoch_loss = 0
            for _ in range(int(mnist.train.num_examples/batch_size)):
                epoch_x, epoch_y = mnist.train.next_batch(batch_size)#diğer yığını alıyor
                _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y})
                epoch_loss += c

            print('Epoch', epoch, 'completed out of',hm_epochs,'loss:',epoch_loss)

        correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))

        accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
        print('Accuracy:',accuracy.eval({x:mnist.test.images, y:mnist.test.labels}))#bu kod bloğu da başarı oranımızı gösteriyor.

train_neural_network(x)[/COLOR]

Kodumuz bu kadar, çalıştırdığımızda;


Kod:
[COLOR="white"]hacknology@hacknomeister:~/Masaüstü/python-neuralnet$ python3 dene.py
Extracting /tmp/data/train-images-idx3-ubyte.gz
Extracting /tmp/data/train-labels-idx1-ubyte.gz
Extracting /tmp/data/t10k-images-idx3-ubyte.gz
Extracting /tmp/data/t10k-labels-idx1-ubyte.gz
Epoch 0 completed out of 10 loss: 1690835.2480316162[/COLOR]

Diye uzanan bir çıktı alacağız. Sonraki yazımızda görüşmek üzere :* hoşçakalın

Kaynakça:
youtube/sentdex
https://www.tensorflow.org/
https://stackoverflow.com/
https://www.mathworks.com/
https://learningtensorflow.com/
https://www.packtpub.com
https://www.quora.com/

Önceki dersler:
http://www.turkhackteam.org/python/1637291-python-machine-learninge-giris-tht-ar-ge-kulubu.html
http://www.turkhackteam.org/python/...-regression-tht-ar-ge-kulubu.html#post7730887
http://www.turkhackteam.org/python/...ion-k-nearest-neighbors-tht-ar-ge-kulubu.html
http://www.turkhackteam.org/python/1654750-python-machine-learning-tensorflow-1-0-ar-ge-kulubu.html
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.