Başlamadan öne TensorFlow’a Kolay Bir Başlangıç’a bakılması tavsiye edilir. TensorFlow hakkında daha detaylı bilgi için TensorFlow 101‘e bakınız.
Problem: Mahallelerin güvenli olup olmadığı ile ilgili başlıca iki kavram vardır. Hırsızlık ve yangın. Güvenlik şirketleri evlerinizi sigortalarken bu iki tehlikeli durumu göz önüne almaktadır. Peki hırsızlık oranı ile yangınların arasında bir bağlantı var mıdır?
Yani diğer bir anlamda X yangınların sayısı olsun, Y de hırsızlık olaylarının sayısı, biz Y = f(X) fonksiyonunu bulabilir miyiz?
Bu ilişkiyi bulmak için, belirli bir alan için verilen yangın sayılarından, hırsızlık sayılarını tahmin etmeye çalışacağız.
the U.S. Commission on Civil Rights tarafından toplanan şu veri setini kullanacağız, Cengage Learning.
Veri Setinin Özellikleri:
İsim: Chicago’da Yangın ve Hırsızlık
X = 1000 konut başına ortaya çıkan yangınlar
Y = 1000 konut başına hırsızlık olayları
toplam posta kodu olan alan sayısı: 42
Çözüm: İlk olarak yangın sayıları ile hırsızlık sayıları arasında doğrusal bir ilişki olduğunu varsayalım. Yani;
Y = wX + b
w ve b olarak iki tane skaler parametre bulmamız gerekecek, kayıp fonksiyonu olarak(loss function) mean squared error kullanacağız. Programı yazalım:
import matplotlib.pyplot as plt import numpy as np import tensorflow as tf import xlrd import os os.system("tensorboard --logdir=logs --port 6009") # Adim 0: veri setimizin path'i DATA_FILE = 'fire_theft.xls' # Adim 1: .xls dosyasini okuyalim. book = xlrd.open_workbook(filename=DATA_FILE, encoding_override='utf-8') sheet = book.sheet_by_index(sheetx=0) data = np.asarray([sheet.row_values(i) for i in range(1, sheet.nrows)]) fires_number = [] thefts_number = [] for i in data: fires_number.append(i[0]) thefts_number.append(i[1]) n_samples = sheet.nrows - 1 # Adim 2: Girdimiz X ve etiketimiz Y icin placeholders olusturalim. # X = yangin sayisi # Y = hirsizlik sayisi X = tf.placeholder(tf.float64, name='X') Y = tf.placeholder(tf.float64, name='Y') # Adim 3: Agirlik ve onyargiyi 0' esitleyelim. w = tf.Variable(0.0, name='weights_1') b = tf.Variable(0.0, name='bias') w = tf.cast(w, tf.float64) b = tf.cast(b, tf.float64) # Adim 4: Modelimizi olusturalim. # Yanginlardan hirsizliklari tahmin edecegiz. Y_predicted = X * w + b # Adim 5: Kayip Fonksiyonu olarak kare hatasini kullanalim. loss = tf.square(Y - Y_predicted, name='loss') # Adim 6: Dereceli azalmayi kullanarak, ogrenme oranimizin kaybini minimize edelim. optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss) with tf.Session() as sess: # Adim 7: Gerekli degerlerimi arayalim. sess.run(tf.global_variables_initializer()) # Adim 8: Modelimizi egitelim. for i in range(100): for x, y in data: sess.run(optimizer, feed_dict={X: x, Y: y}) # Adim 9: w ve b nin sonucu w_value, b_value = sess.run([w, b]) # Adim 10: Grafigin Cizelim. fig, ax = plt.subplots() predicted_thefths_number = [] for i in fires_number: predicted_thefths_number.append(i * w_value + b_value) ax.scatter(fires_number, thefts_number, marker='o', c='blue', label='Real Data') ax.plot(fires_number, predicted_thefths_number, c='red', label='Predicted Data') ax.set_xlabel('Fires') ax.set_ylabel('Thefts') ax.legend() plt.show() # Adim 11: TensorBoard'da goruntuleyebilmek icin kaydedelim. writer = tf.summary.FileWriter('./logs', sess.graph) writer.close() sess.close()
TensorBoard’da çizgemize bakalım, 6009 portumuzu açıp.
CS 20SI: Tensorflow for Deep Learning Research, Lecture Notes, Chip Huyen