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.
not, eğer ssl hatası alıyorsanız -benim gibi...- bu kodlara küçük bir ilave kod parçacığı eklememiz gerekiyor.
Ş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
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
Şimdi kaç sınıf üzerinde çalışacağımızı ayarlayalım. 0 dan 9 a toplam 10 sınıfımız olacak.
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.
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
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.
Ş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.
Üstteki kod bize yardım edecektir.
Geriye sadece çıktıyı ayarlamak kaldı.
Bu modülde şekli oluşturduk. Şimdi işleyelim isterseniz yeni bir modülde
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.
Kodumuz bu kadar, çalıştırdığımızda;
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
Ş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]
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]
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]
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.
Ş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