• Hakkımızda
  • Bize Katıl
  • İletişim
Yazılım Karavanı | Bilişim - Teknoloji - Blog
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
    • Gönderiler
    • Destek
No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
    • Gönderiler
    • Destek
No Result
View All Result
Yazılım Karavanı | Bilişim - Teknoloji - Blog
No Result
View All Result
Home Yapay Zeka

Numpy ile Sıfırdan Adım Adım Yapay Sinir Ağı

Emre İnaç by Emre İnaç
in Yapay Zeka
8 min read
0
Numpy ile Sıfırdan Adım Adım Yapay Sinir Ağı
WhatsApp'ta PaylaşTwitter'da PaylaşLinkedIn'de PaylaşTelegram'da Paylaş

Merhaba arkadaşlar, bu yazımda öncelikle sizlerle bir yapay sinir ağı nedir ve sıfırdan bir yapay sinir ağı nasıl oluşturulur konularını ele alacağız.

1. Yapay Sinir Ağı Nedir?

Sinir ağı, insan beyninin çalışma şeklini taklit eden bir süreç aracılığıyla bir veri kümesindeki temel ilişkileri tanımaya çalışan bir dizi algoritmadır.

Bu anlamda sinir ağları, doğası gereği organik veya yapay olan nöron sistemlerini ifade eder. Sinir ağları değişen girdilere uyum sağlayabilir; böylece ağ, çıktı kriterlerini yeniden tasarlamaya gerek kalmadan mümkün olan en iyi sonucu üretir.

Şekil.1

Yapay sinir ağları temel olarak 3 katmandan oluşur. Input, Hidden ve Output olarak adlandırılan bu katmanlı yapı şekil.1 deki gibi görselleştirilebilir. Input ve Output katmanları sayısı sadece bir tane olabilirken, Hidden katman sayısı değişiklik gösterebilir. Ancak bir yapay sinir ağını ifade ederken Input katmanı sayılmaz ve Output katmanı sayısıyla, toplam Hidden katman sayısının toplamı olan sayı ile ifade edilir. Örneğin şekil.1 deki yapay sinir ağı 1 adet Hidden ve 1 adet Output katmanına sahip olduğundan 2 katmanlı bir yapay sinir ağı olarak ifade edilir.

Yapay sinir ağlarında her nöron arasındaki bağlantılara weight(ağırlık) denir. Başlangıçta weight’lere 0 ve 1 arasından rastgele bir değer atanır. Weight’ler input değerlerinin önemini belirler. Mesela bir fatura tutarı tahmini yapılırken o faturaya ait kullanım miktarı çok önemlidir. Bu nedenle kullanım miktarı girdisinin weight değerleri çok daha büyük bir değere sahip olacaktır.

Yapay sinir ağı mimarisinde bir de çıktı aktivasyonlarını sağ ya da sola ötelemekte kullanılan şekil.1 de b1 ve b2 olarak belirtilen bias adlı değerler de vardır. Bu değerler de genelde weight’ler gibi çok küçük bir değer alır. Çoğu yapay sinir ağında öntanımlı olarak 0 ya da 1 olarak tanımlanır ve model eğitildikçe ağırlıkların değişimine bağlı olarak bias değerleri de güncellenir.

Yapay sinir ağlarında kullanılan learning rate, epoch gibi terimler de mevcuttur. Learning rate genellikle 0.01 gibi çok küçük bir değer olarak tanımlanır. Epoch ise öğrenme işleminin kaç kez tekrarlanacağını belirten ifadedir. Modelin ürettiği çıktıya göre doğruluk oranını artırmak için learning rate ve epoch değerleri değiştirilir.

Son olarak da loss kavramından söz edecek olursak, yapay sinir ağı tarafından tahmin edilen değerin, gerçek değerden ne kadar saptığını belirten değerdir. Öğrenme işlemi sırasında loss değerinin mümkün olduğunca sıfıra yaklaştırmak amaçlanır. Genellikle iki tip loss fonksiyonu kullanılır. Bu fonksiyonlar L2 Loss fonksiyonu ve Cross Entropy Loss fonksiyonlarıdır.

L2 Loss fonksiyonunda, tahmin edilen değer gerçek değerden çıkartılıp aradaki farkın karesini alınarak hesaplanır.
Cross Entropy Loss fonksiyonu da logaritmik loss olarak da nitelendirilir. n ifadesi eğitim verisi sayısını, a ifadesi ise çıktı değerinin, sigmoid aktivasyon fonksiyonu sonucunu ifade eder.
Yapay Sinir Ağlarında Kullanılan Aktivasyon Fonksiyonları

Aktivasyon fonksiyonları, bir sinir ağının çıktısını belirleyen matematiksel denklemlerdir. İşlev, ağdaki her bir nörona bağlanır ve her bir nöronun girişinin modelin öngörüsüyle alakalı olup olmadığına bağlı olarak etkinleştirilip etkinleştirilmeyeceğini belirler. Aktivasyon fonksiyonları ayrıca her bir nöronun çıktısını 1 ile 0 veya -1 ile 1 arasında normalleştirmeye yardımcı olur.

Aktivasyon işlevlerinin ek bir yönü, her veri örneği için binlerce hatta milyonlarca nöron arasında hesaplandığı için hesaplama açısından verimli olmaları gerektiğidir.

1 – Sigmoid Fonksiyonu: 

Sigmoid işlevini kullanmamızın ana nedeni, (0 ile 1) arasında var olmasıdır. Bu nedenle, özellikle olasılığı bir çıktı olarak tahmin etmemiz gereken modeller için kullanılır. Herhangi bir şeyin olasılığı yalnızca 0 ile 1 aralığı arasında olduğundan, sigmoid doğru seçimdir.
Sigmoid fonksiyonu, eğitim sırasında bir sinir ağının takılıp kalmasına neden olabilir. Bu sebeple bu gibi bir durum oluştuğunda, Softmax fonksiyonu kullanılır, Softmax fonksiyonu çok sınıflı sınıflandırma için kullanılan daha genelleştirilmiş bir lojistik aktivasyon fonksiyonudur.

2- Tanh(Hiperbolik Tanjant) Fonksiyonu:

Tanh fonksiyonu, sigmoid fonksiyonunun daha iyi bir versiyonu gibidir. (-1,1) aralığında değerler üretir.

Avantajı, negatif girişlerin güçlü bir şekilde negatif olarak eşleştirilmesi ve sıfır girişlerinin tanh grafiğinde sıfıra yakın bir şekilde eşlenmesidir.

Tanh fonksiyonu esas olarak iki sınıf arasında sınıflandırmada kullanılır.

3- ReLU Fonksiyonu:

ReLU şu anda dünyada en çok kullanılan aktivasyon fonksiyonudur ve  kullanılmaya başlandığından beri neredeyse tüm evrişimli sinir ağlarında veya derin öğrenmede kullanılmaktadır. ReLU fonksiyonu (0,1) aralığında sonuç üretir ve bu sebeple en büyük sorunı, tüm negatif değerlerin anında sıfırlanmasıdır ve bu da modelin verilere uygun şekilde uydurma veya eğitme yeteneğini azaltır. Bu, ReLU aktivasyon fonksiyonuna verilen herhangi bir negatif girdinin, değeri grafikte hemen sıfıra çevirdiği anlamına gelir, bu da negatif değerleri uygun şekilde eşlemeyerek sonuç grafiğini etkiler.
Yapay sinir ağlarında en çok kullanılan aktivasyon fonksiyonlarından da bahsettiğimize göre artık Python dili ve Numpy kütüphanesini kullanarak sıfırdan kendi yapay sinir ağımızı oluşturmaya başlayabiliriz.

Birlikte oluşturacağımız bu yapay sinir ağını kullanarak XOR mantık kapısına girdi olarak verilen değerlerin ne çıktı ürettiğini tahminlemeye çalışacağız. Bu işlemleri sırasıyla adım adım olarak ele alalım.

Yapay Sinir Ağı Sınıfının Oluşturulması

Projemizi oluşturduktan sonra yeni bir python dosyası açıp ilk olarak Numpy kütüphanesini import ederek kodumuzu yazmaya başlıyoruz. Daha sonra NeuralNetwork adında bir sınıf oluşturup, bu sınıftan bir nesne oluşturduğumuzda nesnelerin alacağı parametreleri verdiğimiz, “__init__”  tanımlayıcı metodu ile sınıfımıza ait nesne değişkenlerini tanımlıyoruz.

Sınıfımızı ve nesne değişkenlerini tanımladıktan sonraki aşama olan Weight ve Bias değerlerinin tanımlanmasına geçiyoruz.

Weight ve Bias’ların Tanımlanması

Bir yapay sinir ağında weight ve bias değerleri genellikle (0,1) aralığında seçilir.

Bu sebeple biz de weight ve bias ları tanımlarken Numpy kütüphanesinden random modülüne ait rand metodunu kullanacağız. Random modülü kullandığımız için kodumuzu her çalıştırdığımızda farklı rastgele değerleri seçmesin diye random.seed ile modülün ürettiği rastgele değerleri sabitleyeceğiz, rand metoduna parametre olarak da weight bağlantılarının başlangıç ve hedef node’larının boyutlarını giriyoruz.

Forward Propagation ( İleri Yayılım)

Forward propagation aşamasında, girdi değerleri belirlenen weight ve bias değerlerini kullanarak, çıktı değeri ile kıyaslamak üzere bir tahmin değeri hesaplanır. Elde edilen tahmin değeri, mevcut çıktı değeri ile loss fonksiyonunda kıyaslanıp bir loss değeri elde edilir.

Back Propagation ( Geri Yayılım)

Back propagation aşamasında, bir önceki aşamada elde edilen loss değerine göre türevleri alınarak weight ve bias değerlerinin güncellenmesi işlemi yapılır ve bu işlem yapay sinir ağını oluştururken verilen epoch sayısı kadar tekrarlanır. Türev alma işlemi için Chain Rule (Zincir Kuralı) olarak bilinen yöntem kullanılır.

Back propagation işlemi sonlandığında weight ve bias değerleri elde edilen gradyanlar ile güncellenir ve bir sonraki epoch’a geçilir.

Modelin Eğitilmesi

Modelimizin eğitilmesi için ilk olarak weight ve bias parametreleri tanımlanır, sonrasında girdi değerlerimiz epoch sayısı kadar sırası ile forward ve back propagation aşamalarından geçer, gradyanlar güncellenir.

Artık test verilerimizi kullanarak modelimizin üreteceği tahmin sonuçlarını elde etme ve modelimizin isabetlilik oranını öğrenme aşamalarına geçebiliriz.

Modelin Test Edilmesi ve Test Skoru

Modelimizi, XOR mantık kapısının aldığı girdi değerlerini kullanarak eğittik şimdi de rastgele bir girdi ile modelimizi test ederek sonucu inceleyelim ve sonrasında modelimiz doğru sonuç üretiyor mu anlamak için test skorunu görelim.

Kodumuzu çalıştırdığımızda çıktı aşağıdaki gibi olacaktır:

Sonuç çıktısında da görüldüğü üzere, modelimiz gayet güzel çalışıyor ve doğru sonuç üretiyor. Kaynak kodun tamamına erişmek için aşağıdaki linke tıklayabilirsiniz.

>> https://github.com/einac/xor_neural_network
Tags: AiDeep LearningNumpyYapay Sinir AğlarıYapay Zeka
SendTweetShareShare
Önceki Gönderi

TensorFlow EveryWhere Turkey 2021

Sonraki Gönderi

Flutter Engage Bizi Neler Bekliyor?

İlgili Yazılar

Akciğer Pnömonisinin Mobil Uygulama İle Tespiti (Google Teachable Machine + TFLite + Flutter)

Akciğer Pnömonisinin Mobil Uygulama İle Tespiti (Google Teachable Machine + TFLite + Flutter)

by Ali Murat Çevik
Nisan 16, 2021
0

Giriş Tüm dünyayı etkisi altına alan Covid-19 salgını sonrasında günlük hayatımıza pek çok yeni kavram girdi. Maske, mesafe, hijyen üçlüsüyle...

TensorFlow EveryWhere Turkey 2021

TensorFlow EveryWhere Turkey 2021

by Ali Murat Çevik
Şubat 19, 2021
0

GDG Nedir? GDG, Google Developer Group, yani Google Geliştirici Topluluğu gönüllülerden oluşan ve Google tarafından desteklenen bir yazılım geliştirme topluluğudur....

BARÇEV – SKY LAB Ortak Sorumluluk Projesi #çeviriyoruz

BARÇEV – SKY LAB Ortak Sorumluluk Projesi #çeviriyoruz

by İrem Avcı
Aralık 16, 2020
0

Bartın Üniversitesi Çeviri Topluluğu ve Yıldız Teknik Üniversitesi SKY LAB kulübü olarak toplam 18 gönüllü üyemiz ile ortak bir sosyal...

Günümüz Dünyasının Petrolü “Veri”

Günümüz Dünyasının Petrolü “Veri”

by Emre İnaç
Kasım 1, 2020
0

Merhaba arkadaşlar bu yazımda veri bilimi nedir, neden veri bilimi öğrenmeliyiz ve veri bilimi hangi aşamalardan oluşur bu konulara değineceğim....

Flutter’da TFLite Kullanımı

Flutter’da TFLite Kullanımı

by Ali Murat Çevik
Ağustos 26, 2020
4

Merhaba arkadaşlar, bu yazımda TensorFlow Lite kullanılarak elde edilmiş .tflite uzantılı dosyanın Flutter projesine entegre edilmesini inceleyeceğiz. Entegrasyonu eğitilmiş bir...

Next Post
Flutter Engage Bizi Neler Bekliyor?

Flutter Engage Bizi Neler Bekliyor?

Ethereum 2.0 Geliyor!

Ethereum 2.0 Geliyor!

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

  • Popüler
  • Yorumlar
  • En Yeniler
İkili Arama (Binary Search) Algoritması

İkili Arama (Binary Search) Algoritması

Mayıs 24, 2018
Splash Screen Yapımı #Flutter

Splash Screen Yapımı #Flutter

Mayıs 25, 2020
Hızlı Sıralama (Quick Sort) Algoritması

Hızlı Sıralama (Quick Sort) Algoritması

Mayıs 24, 2018
B Ağaçları (B Trees)

B Ağaçları (B Trees)

Ağustos 24, 2020
2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

6
Flutter’da TFLite Kullanımı

Flutter’da TFLite Kullanımı

4
Magento 2 Detaylı Kurulum & Hatalar

Magento 2 Detaylı Kurulum & Hatalar

3
Bubble Sort (Kabarcık Sıralama) Algoritması

Bubble Sort (Kabarcık Sıralama) Algoritması

2
Akciğer Pnömonisinin Mobil Uygulama İle Tespiti (Google Teachable Machine + TFLite + Flutter)

Akciğer Pnömonisinin Mobil Uygulama İle Tespiti (Google Teachable Machine + TFLite + Flutter)

Nisan 16, 2021
Ethereum 2.0 Geliyor!

Ethereum 2.0 Geliyor!

Nisan 11, 2021
Flutter Engage Bizi Neler Bekliyor?

Flutter Engage Bizi Neler Bekliyor?

Mart 5, 2021
Numpy ile Sıfırdan Adım Adım Yapay Sinir Ağı

Numpy ile Sıfırdan Adım Adım Yapay Sinir Ağı

Şubat 26, 2021

Reklam

Önerilen Uygulama

Yazılım Karavanı | Bilişim – Teknoloji – Blog

Bilgi Teknolojileri alanına meraklı herkesin buluşma noktası!

No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
    • Gönderiler
    • Destek

© 2020 Yazılım Karavanı Kaynak gösterilmesi zorunludur