Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Mnist Data Setiyle En Basit (Tek Katmanlı) Yapay Sinir Ağı --- http://www.bulentsiyah.com/mnist-data-setiyle-en-basit-tek-katmanli-yapay-sinir-agi/
import tensorflow as tf
"""
@author:Bulent Siyah
@date:2018
Mnist data setiyle en basit (tek katmanlı) sinir ağı Python kodudur.
"""
#####################################
#70 bın tane 28*28 lık veri (60 bın egıtım 10 bın test)
#verı yoksa indirilecek yaklasık 10 mb, her resim değeri 784 lık vektördür,
# one hot (hanı rakam ise index sıfırdan başlayacak şekilde o değer 1 oluyor)
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("data/MNIST/",one_hot = True)
#####################################
# Placeholder'lar Tensorflow'da yer tutucularımızdır.
# x placeholder'ına resimleri atayacağız, y_true placeholder'ına ise etiketleri atayacağız.
# x'e boyut olarak None ve 784 veriyoruz. None dediğimiz için kaç tane resim gelirse gelsin kabul edecektir.
# y_true için None ve 10 atıyoruz. 10 tane sınıf sayımız yani mnist içerisinde 10 tane rakam olduğu için 10 veriyoruz.
x = tf.placeholder(tf.float32, [None,784])
y_true = tf.placeholder(tf.float32, [None, 10])
#####################################
# Weight ve bias eğitilecek parametrelerdir.
# x = [500,784]
# w = [784, 10]
# x*w = [500,10]
# b = [10]
# x*w+b
# tf.matmul matrislerde çarpma işlemi yapıyor.
# Softmax sınıflandırma yaparken kullandığımız bir aktivasyon fonksiyonu.
# 10 nörondaki tüm değerler 0-1 arasına sıkıştırılacak ve aynı zamanda bu nöronlardaki değerlerin toplamı 1'e eşit olacak.
# örnek bir deger logit = [1.2,0.6,-0.4,-0.2,4.3, 0.1,0.3,-0.1,0.5,0.7]
# softmax(logit) = [0.04,0.02,0.02,0.02,0.84,0.01,0.02,0.01,0.01,0.02]
w = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
logits = tf.matmul(x,w) + b
y = tf.nn.softmax(logits)
#####################################
#cross entropy ile loss degerı her resım ıcın olculup xent ıcıne atılacak
#loss reduce ıle degerlerın ortalaması
#Resimleri batch olarak yani 128'er 128'er besleceyeğiz.
# Bu yüzden softmax her resim için bir değer verecek. Yani 128 tane değer verecek.
xent = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_true)
loss = tf.reduce_mean(xent)
#####################################
# Tüm bunları True, False olarak bir listeye atıyoruz.
# Reduce mean ile tüm True False'ların ortalamasını alarak isabet oranını hesaplıyoruz.
# True ve False üzerinde matematiksel işlem yapamadığımız için tf.cast ile bunları 1 ve 0'a dönüştürüyoruz.
# Optimizasyon yaparak weight ve bias değerlerini güncelliyoruz.
# 0.5 learning rate'imiz.
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_true,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
optimize = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
#####################################
# tf.Session ile Tensorflow Session'ı açıyoruz
# Resimleri batch olarak alacağız.
sess = tf.Session()
sess.run(tf.global_variables_initializer())
batch_size =128
#####################################
# Döngü döndükçe model eğitilecek ve öğretmek istediğimiz şeyi öğretecek.
# mnist.train.next_batch ile datasetinden batch_size kadar yani 128 tane resim ve etiket alıyoruz.
# Aldığımız resimleri x_batch'e etiketleri ise y_batch'e atıyoruz.
# Bu döngü her döndüğünde farklı farklı resimleri alarak grafiğe besliyoruz.
# Feed dict ile placeholder'lara ne atanacağını belirliyoruz.
# x ve y_true için placeholder oluşturmuştuk.
# x'e resimleri y_true'ya etiketleri atıyoruz.
# sess.run ile yukarda tanımladığımız kodları çalıştırıyoruz.
# optimize'yi çalıştırarak optimize yapıyoruz. Placeholder'lara ne atadığımızı öğrenmek için feed dict bekleyecektir.
def traning_step(iterations):
for i in range(iterations):
x_batch, y_batch = mnist.train.next_batch(batch_size)
feed_dist_train = {x:x_batch, y_true:y_batch}
sess.run(optimize,feed_dict=feed_dist_train)
#####################################
# Eğitim tamamlandıktan sonra model ne kadar başarılı test etmemiz gerekiyor.
# Feed dict'te bu sefer x ve y_true'ya test resim ve etiketlerini atıyoruz.
# sess.run ile accuracy'yi çalıştırarak bir değişkene atıyoruz.
# Böylelikle modelimiz ne kadar isabetli çalışıyor göreceğiz.
def test_accuracy():
feed_dict_test = {x: mnist.test.images, y_true: mnist.test.labels }
acc = sess.run(accuracy, feed_dict=feed_dict_test)
print('Testing accuracy:',acc)
#####################################
# n iterasyon ile eğitim yapıyoruz ve testle sonuçları inceliyoruz
traning_step(2000)
test_accuracy()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment