TensorFlow ve Keras Nedir?

Ayla Bilgin
4 min readApr 11, 2021

--

Bu yazımızda TensorFlow’dan ardından da Keras kütüphanesinden bahsedip örnek kodlar yazacağız. Keyifli okumalar dilerim…

TensorFlow, bir dizi görev arasında veri akışı ve türevlenebilir programlama için kullanılan ücretsiz ve açık kaynaklı bir yazılım kütüphanesidir. Sembolik bir matematik kütüphanesidir ve sinir ağları gibi makine öğrenimi uygulamaları için de kullanılır. TensorFlow, Google Brain ekibi tarafından dahili Google kullanımı için geliştirilmiştir.

TensorFlow ile derin öğrenme destekli yapay zeka uygulamaları geliştirilebilir. Esnek bir yapıya sahiptir. Yani tek bir API ile platform farketmeden hesaplama yapmaya olanak sağlar. Birden fazla dili destekler. Fazla tercih edilmesinin en büyük nedeni bahsettiğimiz gibi farklı platformlar üzerinde rahatlıkla kullanılabilmesidir. İlk olarak Pyhton için geliştirilmiştir, daha sonra ilerleyen zamanlarda Pyhton’a ek olarak JavaScript, R, C#, C++ gibi popüler diller için de desteklenmektedir. Temel kullanım alanlarından bahsedecek olursak:

  • Ses Tanıma/Algılama
  • Duygu Analizi
  • Kusur Tespiti
  • Dil Algılama
  • Metin Tabanlı Uygulamalar
  • Metin Özetleme
  • Görsel Tanıma
  • Video Algılama
  • Zaman Serileri

Tensörler yüksek boyutlu olan verileri temsil etmemize izin veren çok boyutlu dizilerdir. Aşağıda boyutların bir farklı gösterimi verilmiştir [1].

[1]

TensorFlow; mobil uygulama, web uygulaması veya IoT cihazları üzerinde geliştirilecek projeler için uygun kütüphaneleri içerisinde barındırıyor.

Keras, Python’da yazılmış açık kaynak kodlu bir sinir ağı kütüphanesidir [2]. Daha önceki yazılarımda kısaca sinir ağlarından bahsetmiştik göz atmanızı tavsiye ederim. Keras; TensorFlow, Microsoft Cognitive Toolkit, R, Theano veya PlaidML ile beraber çalışabilir.

Derin sinir ağları ile hızlı deney yapabilmek için tasarlanmıştır. Kolay ve hızlı bir şekilde model oluşturulmasına olanak sağlarken deneme yanılma yaparak modelde neleri değiştirebileceğimize karar vermemizi kolaylaştırır. Bilgisayarlı görme modelleri için evrişimli sinir ağlarını (CNN), sürekli veriler içinse yinelemeli sinir ağlarını (RNN) destekler [3].

Keras’ta model tanımlamanın iki yolu bulunmaktadır. Sequential ve Functional API. Sequential, en sık kullanılan olmakla beraber katmanları yığmak için kullanılır. Functional API ise çoklu çıktılı modeller gibi karmaşık model mimarileri tasarlamak için kullanılır. Sequential için aşağıdaki kodu kullanabiliriz.

from keras.models import Sequential

Keras’ta modelleri oluştururken aşağıdaki sırayı izleriz:

  1. Veriyi tanımlama
  2. Modeli derleme
  3. Modeli yürütme
  4. Tahminler yapma

Keras ile Tensorflow arasındaki farklardan ve değişikliklerden de biraz bahsedelim.

[2]

Keras yukarıda bahsettiğimiz gibi bir Google araştırmacısı tarafından geliştirilmiştir. Kolay kullanımı nedeniyle programcılar tarafından yüksek ilgi gördü. Çıktığı zamanlarda çok fazla derin öğrenme kütüphanesi olmadığından da bu ilgiyi görmüştür. Diğer kütüphanelerde kıyasla daha hızlı hareket ettiği söylenebilir. Keras’ın ardından Google TensorFlow’u yayınladı. Keras o zamana kadar arka uç olarak Theano kullanırken TensorFlow’u da desteklemeye başladı. Bu durumda TensorFlow ile Keras ayrılmaz bir ikili haline gelmişti. Keras yüklüyorsak TensorFlow’u da yüklemiş oluyoruz. Ama geldiğimiz yıllarda bu durum biraz değişmiş oldu. Google 2019'da TensorFlow’un resmi üst düzey API’sını yayınladı (‘tf.keras’ paketi).

Örnek bir Python kodlaması ile başlayalım. Öncelikle kodumuza gerekli kütüphanelerimizi ekleyelim. Ben Anaconda üzerinden Jupyter kullandım. Bu kodda gürültüsü bulunan görüntülerimizin gürültüsünü azaltarak şekilleri daha okunaklı hale getirmeye çalışacağız.

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Model

Uygun kütüphaneleri ekledikten sonra Bir fonksiyon yazarak görüntülerimizi normalize ederek yeniden şekillendiriyoruz. Verideki her görüntüye rastgele olarak gürültü eklendi ardından yine rastgele olarak tane görüntü alıyoruz.

def preprocess(array):
array = array.astype(“float32”) / 255.0
array = np.reshape(array, (len(array), 28, 28, 1))
return array
def noise(array):
noise_factor = 0.4
noisy_array = array + noise_factor * np.random.normal(
loc=0.0, scale=1.0, size=array.shape
)
return np.clip(noisy_array, 0.0, 1.0)
def display(array1, array2):
n = 10
ndices = np.random.randint(len(array1), size=n)
images1 = array1[indices, :]
images2 = array2[indices, :]
plt.figure(figsize=(20, 4))
for i, (image1, image2) in enumerate(zip(images1, images2)):
ax = plt.subplot(2, n, i + 1)
plt.imshow(image1.reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
ax = plt.subplot(2, n, i + 1 + n)
plt.imshow(image2.reshape(28, 28))
plt.gray()
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()

Bütün bunları hazırladıktan sonra veri setimizi eğitmek için modelimizi hazırlıyoruz. Tekrardan normalize edip yeniden şekillendiriyoruz. Örnek olarak bir çıktı elde ediyoruz. Bu adımda veri seti için gerekli yüklemeler yapıldı.

(train_data, _), (test_data, _) = mnist.load_data()train_data = preprocess(train_data)
test_data = preprocess(test_data)
noisy_train_data = noise(train_data)
noisy_test_data = noise(test_data)
display(train_data, noisy_train_data)

Biz yukarıdaki çıktıyı elde ettik. Her çalıştırmada farklı görüntüler elde edilmektedir. Şimdi sıra modeli eğitmeye geldi. Modeli fonksiyonel API kullanarak eğitiyoruz.

input = layers.Input(shape=(28, 28, 1))x = layers.Conv2D(32, (3, 3), activation=”relu”, padding=”same”)(input)
x = layers.MaxPooling2D((2, 2), padding=”same”)(x)
x = layers.Conv2D(32, (3, 3), activation=”relu”, padding=”same”)(x)
x = layers.MaxPooling2D((2, 2), padding=”same”)(x)
x = layers.Conv2DTranspose(32, (3, 3), strides=2, activation=”relu”, padding=”same”)(x)
x = layers.Conv2DTranspose(32, (3, 3), strides=2, activation=”relu”, padding=”same”)(x)
x = layers.Conv2D(1, (3, 3), activation=”sigmoid”, padding=”same”)(x)
autoencoder = Model(input, x)
autoencoder.compile(optimizer=”adam”, loss=”binary_crossentropy”)
autoencoder.summary()
autoencoder.fit(
x=train_data,
y=train_data,
epochs=50,
batch_size=128,
shuffle=True,
validation_data=(test_data, test_data),
)

Bu kısım kod içerisindeki en uzun sürecek kısım verileri tek tek modelimizi eğitmede kullanıyoruz. Bu işlem tamamlandıktan sonra deneme yapmak için kodlarımızı yazıyoruz.

predictions = autoencoder.predict(noisy_test_data)
display(noisy_test_data, predictions)

Çıktımızı bu şekilde elde ettik. Ben bu örnek kodları Keras’ın kendi sitesinde bulunan örneklerden aldım. Siz de farklı örneklere bakmak ve denemek isterseniz bu linkten ulaşabilirsiniz. Kodların tamamını aşağıda bulabilirsiniz.

Yazımızın burada sonuna geldik. İyi çalışmalar dilerim. Bir sonraki yazıda görüşmek üzere…

--

--