Yapay Sinir Ağları / Temel Öğrenme Algoritmaları

Merhabalar,

Yapay Sinir Ağları, temel öğrenme algoritmalarından Perceptron, Hebb, Delta ve Widrow-Hoff öğrenme kurallarının, Python ile yazılmış, Numpy modülü kullanılmış kodlarıdır.

Numpy modülünü ileride daha karmaşık işlemler için kodlarda matrissel bir altyapı olmasını istediğim için kullandım. Matrislerinizi girerken;

np.matris('1; 1; 0')

yazım tarzı gibi girmelisiniz.

Kodlar ise şöyle;

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np # Matrisleri tanımlamak icin gerekli paket
import math        # exp islemi icin gerekli modul

def Hebb():
	x=[] # Girisleri tutar.
	y=[] # u toplam degerlerini tutar.
	# W alınır;
	w=input("W agirlik vektorunu giriniz: ")
	#################
	# Girişler alınır;
	xSayisi=input("Kac adet X girisi yapacaksiniz? ")
	h=xSayisi+1
	for g in range(1,h):
		print "X%s" %(g)
		xi=input()
		x.append(xi)

	elemanSayisi=len(x)
	#################
	# alfa alınır;
	alfa=input("Alfa degerini giriniz: ")
	#################
	# Lambda alınır;
	l=input("Lambda degerini giriniz: ")
	#################
	#Egitme adimi alinir;
	egitmeAdimi=input("Egitme Adimi:")
	#################
	#Fonksiyon tipi belirlenir;
	fonksiyonSecimi=input("Fonksiyon tipini seçiniz:\n1: Bipolar sürekli\n2: Bipolar binary\n")
	#################

	i=0
	for i in range(0,egitmeAdimi):
		a=i
		while elemanSayisi <= a:
			a=a-elemanSayisi+1
		i=a
		wT=w.T # Numpy modulu transpoze islemi
		u=wT*x[i]
		if fonksiyonSecimi == 1:
			fu=1/1+math.exp(-l*u)
		else:
			if u < 0:
				fu=-1
			else:
				fu=1
		dw=x[i]*fu*alfa
		wy=w+dw # Yeni agirlik vektoru
		w=wy
		print
		print "Yeni W agirlik vektoru; "
		print w
		print

def Perceptron():
	x=[] # Girisleri tutar.
	d=[] # Hedef degerleri tutar.
	uk=[] # U degerlerini tutar.
	# W alınır
	w=input("W agirlik vektorunu giriniz: ") #np.matrix('0;1;0')
	#################
	# Girişler alınır;
	xSayisi=input("Kac adet X girisi yapacaksiniz? ")
	h=xSayisi+1
	for g in range(1,h):
		print "X%s" %(g)
		xi=input()
		x.append(xi)

	elemanSayisi=len(x)
	#################
	# Beklenen degerler alinir;
	for f in range(1,h):
		print "d%s" %(f)
		di=input()
		d.append(di)

	#################
	# alfa alınır;
	alfa=input("Alfa degerini giriniz: ")
	#################
	#Egitme adimi alinir;
	egitmeAdimi=input("Egitme Adimi:")
	#################

	i=0
	for i in range(0,egitmeAdimi):
		a=i
		while elemanSayisi <= a:
			a=a-elemanSayisi+1
		i=a
		wT=w.T
		u=wT*x[i]
		uk.append(u)
		if u < 0:
			u=-1
		else:
			u=1
		if d[i] == u:
			print "Agirlik guncellenmez"
			print " "
			print "----"
			print " "
			i=i+1
			w=w
		else:
			r=d[i]-u
			dw=r*alfa*x[i]
			wy=dw+w
			w=wy
			i=i+1
			print
			print "Yeni W agirlik vektoru; "
			print w
			print

	print "Bu degerler signum fonksiyonu baz alinarak hesaplanmistir."
	print "Egitme suresince Uk degerleri;"
	print uk

def Delta():
	x=[]
	d=[]
	yi=[] #delta w'de türevi alınan f(yi) fonksiyonu

	#w alınır
	w=input("W agirlik vektorunu giriniz: ")#np.matrix('1;0;1')
	#################
	# Girişler alınır
	xSayisi=input("Kac adet X girisi yapacaksiniz? ")
	h=xSayisi+1
	for g in range(1,h):
		print "X%s" %(g)
		xi=input()
		x.append(xi)

	elemanSayisi=len(x)
	#################
	# Beklenen degerler alinir
	for f in range(1,h):
		print "d%s" %(f)
		di=input()
		d.append(di)

	#################
	#Lambda alınır
	l=input("Lambda degerini giriniz: ")
	#################
	#alfa alınır
	alfa=input("Alfa degerini giriniz: ")
	#################
	#Egitme adimi alinir
	egitmeAdimi=input("Egitme Adimi:")
	print 
	#################
	y=0
	i=0
	for i in range(0,egitmeAdimi):
		a=i
		while elemanSayisi <= a:
			a=a-elemanSayisi+1
		i=a
		wT=w.T
		u=wT*x[i]
		fu=1/1+math.exp(-l*u)
		yi.append(u)
		r=(d[i]-fu)*(yi[i]*(1-yi[i]))
		dw=x[i]*r*alfa
		wy=dw+w
		w=wy
		print "W ağırlığı;"
		print
		print w
		print 
		print "----"
		print

def Widrow_Hoff():
	x=[]
	d=[]
	yi=[] #delta w'de türevi alınan f(yi) fonksiyonu

	#w alınır
	w=input("W agirlik vektorunu giriniz: ")#np.matrix('1;0;1')
	#################
	# Girişler alınır
	xSayisi=input("Kac adet X girisi yapacaksiniz? ")
	h=xSayisi+1
	for g in range(1,h):
		print "X%s" %(g)
		xi=input()
		x.append(xi)

	elemanSayisi=len(x)
	#################
	# Beklenen degerler alinir
	for f in range(1,h):
		print "d%s" %(f)
		di=input()
		d.append(di)

	#################
	#Lambda alınır
	l=input("Lambda degerini giriniz: ")
	#################
	#alfa alınır
	alfa=input("Alfa degerini giriniz: ")
	#################
	#Egitme adimi alinir
	egitmeAdimi=input("Egitme Adimi:")
	print 
	#################
	y=0
	i=0
	for i in range(0,egitmeAdimi):
		a=i
		while elemanSayisi <= a:
			a=a-elemanSayisi+1
		i=a
		wT=w.T
		u=wT*x[i]
		r=d[i]-u
		dw=x[i]*r*alfa
		wy=dw+w
		w=wy
		print "W ağırlığı;"
		print
		print w
		print 
		print "----"
		print

print """Etkileşimli Yapay Sinir Aglari 4 Temel Ogrenme Kuralı programına hosgeldiniz.
Lütfen calismak istediginiz ogrenme kuralını listeden seciniz.\n"""
a=input("""1. Hebb Ogrenme Kurali\n2. Perceptron Ogrenme Kurali
3. Delta Ogrenme Kurali\n4. Widrow-Hoff Ogrenme Kurali\n""")

if a == 1:
	Hebb()
elif a == 2:
	Perceptron()
elif a == 3:
	Delta()
elif a == 4:
	Widrow_Hoff()
else:
	quit()

sec=input()

Çalışmalarınızda kullanırken buradan aldığınızı da belirtirseniz beni bahtiyar edersiniz. 🙂

Renkli günler…