Gelişen teknolojiyle beraber dijitalleşen hayatlar sonucunda her geçen saniye binlerce veri kayıt altına alınmaktadır. Bu veriler; açık veya kapalı devre kameralardan alınan veriler, bir sunucu veya data centerın log kayıtları, bir gsm şireketinin ses kayıtları, bir sosyal medyadaki veriler diye uzayıp giden devasa veri yığınlarının da dahil olduğu uzunca bir liste. Dijital sahada bu kadar veri dururken bunların insan gücüyle analiz edilmesi neredeyse imkansız hale gelmiştir. Çünkü bu büyük veri yığının içerisinde gerekli olan anlamlı verileri çıkarmak yada bu verileri kullanarak anlamlı bir sonuç çıkarsama birçok insanın bile yapabileceği bir iş değildir. Bu problemlere çözüm olacak yöntem ise makinelerin de kendilerine özgü karar verme ve çıkarım yapabilme yeteneklerine sahip olmasıdır. Bu kadar veriler içerisinde anlamlı olan verileri ayıklamak veya bu verileri kullanarak bir çıkarsama yapabilmesi artık çağımızın bir zorunluluğu haline gelmiştir.
İşte bu noktadan sonra biyolojik olarak insan zekasının çalışma mantalitesinden esinlenerek yapay zeka tekniği geliştirilmeye başlandı ve hala ciddi çalışmalar ile devam etmektedir. Bu yazımızda yapay zekanın öğrenme tekniklerden biri olan yapay sinir ağı(YSA) mimarisini kullanarak python ile basit bir uygulama yapacağız. Bildiğiniz üzere python veri madenciliğinden, bilimsel çalışmalara, yapay zekadan siber güvenliğe kadar yelpazesi çok geniş olan bir dildir. Yapay sinir ağı konusunda çok ciddi kütüphaneleri de bulunmaktadır. Bunlardan bazıları coffe, theano, tensorflow, scikit, panda ve torch kütüphaneleridir.
Keras ise arkada tensorflow veya theano kütüphanesini kullanan bir arabirimdir. Biz ise keras ile arkada tensorflow kullanarak bir uygulama yapacağız. Tensorflow, google tarafından geliştirilmiş ve 2015 yılında bir kısmı public hale getirilen makina öğreniminde kullanılan ciddi bir kütüphanedir.
Ancak örnek uygulamamızı yazmaya geçmeden önce yapacağımız uygulamayı anlamak için yapay sinir ağı mimarisinin nasıl çalıştığını bilmemiz ve bu konudaki terminolojiye biraz hakim olmamız gerekmektedir. Bu sebeble kısa bir şekilde biraz değineceğiz. Ancak bu yazıyı konuya biraz hakim olduğunuzu ve yazacaklarımı hatırlamanız amacıyla yazdığımı belirtmek isterim.
Aşağıdaki resimde giriş ve ara katmanlar(hidden layers) olmak üzere üç katmanlı yapıya sahip bir yapay sinir ağı modeli görmektesiniz.
Yukarıdaki gördüğünüz her bir düğüm aslında bir yapay sinir hücresini temsil etmektedir. Ve bunlara perceptron denmektedir. Perceptronlar arasındaki çizgiler ise ağırlıkları temsil etmektedir. Ve bir perceptronun değeri; kendisinden bir önceki katmanda bulunan bütün perceptronlardaki değerin ilgili ağırlıklarıyla çarpıldıktan sonra bir toplam fonksiyonundan geçtikten sonra bulunan değerin bir aktivasyon fonksiyonundan geçmesi sonucu bir değere sahip olacaktır. Bu bulunan sonuç, bir sonraki katmana girdi olarak verilmektedir Anlatmak istediğimizi aşağıdaki resim açıkça izah etmektedir. Aşağıdaki resim, yukarıda gördüğünüz her düğüm içerisinde olan işlemleri göstermektedir.
Yandaki resimde Xi’ler bizim girdi değerlerimiz, Wi’ler ise ağırlıklarımızı ifade etmektedir. Her girdi kendi ağırlığıyla çarpıldıktan sonra çıkan değeri bir sonraki katmandaki bulunan perceptronlara aktarmaktadır ve bu perceptronda toplam fonksiyonundan geçtikten sonra çıkan değer aktivasyon fonksiyonuna göndererek ortaya nihai bir değer çıkacaktır. Ve varsa bu değer bir sonraki katmana aktarılarak bu döngü çıkışa varıncaya kadar böyle devam edecektir. Bu her değer için bu iterasyon yapılacaktır. Ve her iterasyonda uygun bir sonuç bulmak için ağırlıklar yeniden düzenlenecektir. Bu olaya epoch denilmektedir. Çünkü sonuçları etkileyen en önemli etkenlerden biri de ağırlık değerlerimizdir. En basit haliyle bir ysa modeli bu şekildedir. Şimdi ise verilerin bu model içerisinde nasıl işlenildiğine kısaca değinelim;
Elimizde bir dataset(veri kümesi) olur. Bu dataset bizim kullanacağımız teknik gereği birden fazla girdinin ama bir çıktının olacağı bir yapıya sahip olmalıdır. Örneğin; bir kullanıcının mouse hareketlerini, tıklama sayıları, girdiği siteleri, bu sitelerde kaldığı süre gibi çevresel değişkenleri alıp bu değerler sonunda bu kişinin bot mu? Insan mı? Değerini saklayan bir dataset düşünelim.
10 bin kullanıcıdan alınan değerler sonucunda bu kişilerin bot mu? Insan mı? Olduğu değerini tutan böyle bir datasetimizin olduğunu varsayalım. Bu değerlerimiz gerçek değerlerdir. Yani herhangi bir lab ortamında bot davranışlarını tuttuklarını ve binlerce insanın bilgisayar kullanırken ki aktivitelerini kayıt altına aldıklarını düşünelim. Çünkü bizim ysa modelimiz bu örneklerden bir çıkarım yaparak kendisine daha önce hiç gösterilmemiş bir örnek gösterildiğinde bunun bot mu? Insan mı? Olduğunu bu gerçek değerlerle kendisini eğiterek bulacaktır. Ama öncesinde tabi ki de sistemimizin öğrenme eğitimini tamamlaması gerekir.
Biz bu 10 bin veriden 9 bin tanesini ysa modelimize eğitim verisi olarak vereceğiz. Eğitim verileri, bir ysa modelini eğitmek için verilen verilerdir. Bizim bu örneğimizde ise girdi ve çıktı değerlerinin olduğu veriye verilen isimdir. Çünkü modelimiz girdi değerleri ile çıktı arasında bir matematiksel model oluşturmaya çalışacak. Bu model oluştururken ağırlıklar, aktivasyon fonksiyonu, ara katmanlar, katmanlardaki perceptron sayıları gibi değişkenler değiştirilip en uygun değer bulunmaya çalışılır. Ve modelimiz belirlediğimiz bir eşik değerine vardığında öğrenme sona erer. Öğrenme bitmesi ysa modelimizin girdi ve çıktılarımız arasında bir matematiksel model bulduğu anlamına gelmektedir. Sistem eğitimi tamamladıktan sonra test etmemiz gerekmektedir. Testi ise 10 bin veriden bir köşeye ayırdğımız bin adet veriyle yapacağız. Ancak burda önemli olan nokta şudur; Test verilerimizi verdiğimiz de sadece girdi değişkenlerimizi vereceğiz. Yani o kişinin bot mu? Insan mı? Olduğu değerini vermeyeceğiz aksine modelimiz bu değeri kendisi bulacak. Ve bulacağı bu değeri gerçek değer ile mukayese ederek sistemimizin yüzde kaç başarılı olduğunu hesaplayacağız. Örneğin yüzde 90 ve üzeri bir başarı bizim için kabul edilebilir bir değer ise modelimiz başarılı olmuştur demektir. Zaten hiçbir ysa modeli size %100 kesin sonuçla bir değer veremez. Her zaman bir hata payı vardır ve olmak zorundadır. Çünkü sistem kendisi verilen değerlerden bir sonuç çıkarmaktadır. Eğer yüzde 100 doğru cevap veriyorsa bir sistem o sistem öğrenmemiş ezber yapmıştır. Bu duruma overfitting de denilmektedir.
Ayrıca dikkat ettiyseniz tabloları kullanıyoruz bu da YSA’da özellikle matrisleri çok yoğun kullanacağımız anlamına gelir. Zaten uygulamamızı yaptığımızda numpy kütüphanesini de kullanacağımızı göreceksiniz. Unutmadan aslında yaptığımız anlatığımız bunca şeyin arkada nasıl çalıştığını ve öğrenme dediğimiz o olayın nasıl gerçekleştirildiğini çok güzel simüle eden
Şimdi bir ysa modeli için bir kaç önemli hususu maddeler halinde verelim.
Bu kadar cümleden sonra işin hikaye kısmını bitirdik ve artık teknik kısma geçmek için hazırız. Bizim kullanacağımız
Öncellikle kullanacağımız kütüphaneleri varsa diğer projelerde kullandığımız kütüphaneleri etkilememesi için bir virtual environment kullanarak uygulamamızı diğer python kütüphanelerinde izole hale getireceğiz. Bunun için;$sudo pip3 install virtualenvKurulum bitince ardından ;$sudo virtualenv kerasdiyerek keras adından bir izola ortam oluşturup;source /bin/activatediyerek izole ortamımızı aktif hale getirelim. Şimdi ihtiyaç duyacağımız kütüphanleri yükleyelim.$sudo pip3 install numpy $sudo pip3 install tensorflow $sudo pip3 install keras
İşlem bittiğinde uygulamamız için gerekli herşey hazır demektedir. Artık python kodumuzu yazmaya başlayabiliriz. Öncellikle kullanacağımız paketleri import edelim.
1
2
3
4
5
6
7
8
9
10
11
#Kullanacağımız ysa modeli için.
from keras.models import Sequential
#YSA modelimizde katmanlar oluşturabilmek için.
from keras.layers import Dense
#Çıktımızı terminalden aldığımızda sonuçları renklendiriyoruz. Yanlışlar kırmızı, doğrular yeşil. Bunu kullanmasanızda olur yani.
from termcolor import cprint
#YSA matrislerle çalıştığı için numpy olmazsa olmaz.
import numpy
Datasetimizi yüklüyoruz.
1
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
numpy kütüphanesindeki loadtxt() metodumuz verilen ilk parametredeki dosya/string I delimiter(ayırıcı) ile split ederek bir matrise atamaktadır. Datesetimizi ayrıştırıyoruz. X, 8 adet girdimiz. Yani 600 satır ve 8 sutun. Y ise çıkışımız 600 satır 1 sutundan oluşmaktadır. Eğer bu parçalamayı anlamadıysanız lütfen
1
2
X = dataset[:600,0:8]
Y = dataset[:600,8]
Şimdi modelimizi oluşturup katmanlarımızı yerleştirelim. Modelimizden model adında bir nesne türettik.
1
model = Sequential()
Ve ilk katmanımızı modelimize add metodu ile dense tipindeki katmanımızı ekliyoruz. Parametrelerden 12 olanı ilk katmandaki perceptron sayısı. İnput dim bizim girdi değer sayımız. Hatırlarsanız 8 değerimiz vardı. Init parametremiz yapay sinir hücrelerimiz arasındaki ağırlıklarımızın rastgele verilmesi yerine belli bir algoritmaya göre vermektedir. Aktivation ise o katmanda kullandığımız aktivasyon fonksiyonumuz.
1
model.add(Dense(20, input_dim=8, init='uniform', activation='relu'))
1
2
3
4
5
6
7
8
9
10
11
#İkinci katmanımızda 12 yapay sinir hücresi.
model.add(Dense(12, init='uniform', activation='relu'))
#Üçüncü katmanımızda 8 yapay hücremiz var.
model.add(Dense(8, init='uniform', activation='sigmoid'))
#Dördüncü katmanımızda 1 yapay hücremiz var. Yani çıkışımız.
model.add(Dense(1, init='uniform', activation='sigmoid'))
#Modelimizi derliyoruz.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Modelimizi çalıştırıyoruz. İlk parametre girdilerimiz, ikincic parametre çıktığımız. 3. paramtre epoch değerimiz. Yani ağırlıkların yeniden düzenleyerek çözüme en yakın değeri buluncaya kadar yapacağı deneme sayısı. Batch size tek seferde alınacak veri sayısını ifade etmektedir. Verbose ise herhangi bir hata oluşması durumunda göstermemeisini istedik.
1
model.fit(X, Y, nb_epoch=150, batch_size=10, verbose=2)
Modelimizin başarı yüzdesini hesaplıyoruz.
1
scores = model.evaluate(X, Y)
Ve son olarak modelimizin sonucunu ekrana basıyoruz.
1
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
Evet buraya kadar modelimiz verdiğimiz örnekleri kullanarak girdi ve çıktılar arasında ilişkisel olarak bir model buldu ve eğitim sona erdi. Bundan sonra sisteme test verilerimizi vererek ne kadar başarılı bir sonuç bulduğunu hesaplayacağız. Şimdi köşeye ayırdığımız 1000 değeri sistemimize vereceğiz ve ysa modelimizin bulduğu sonuçlar ile gerçek sonuçları karşılaştırıp ne kadar başarılı olduğunu görelim. Aşağıdaki kodlarıda yine aynı python dosyasına yazarak devam edelim.
1
2
3
4
5
#96 adet test verimizin sadece 8 girdisini sisteme veriyoruz.
test_verisi = dataset[600:696, 0:8]
#Sistemin verdiğimiz değerlerden yola çıkarak kişinin diyabet hastası olup olmadığını tahmin ediyor.
predictions = model.predict(test_verisi)
Buradan sonrası ise sonuçları ekrana basma olayı.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dogru = 0
yanlis = 0
toplam_veri = len(dataset[600:696,8])
for x, y in zip(predictions, dataset[600:696,8]):
x = int(numpy.round(x[0]))
if int(x) == y:
cprint("Tahmin: "+str(x)+" - Gerçek Değer: "+str(int(y)), "white", "on_green", attrs=['bold'])
dogru += 1
else:
cprint("Tahmin: "+str(x)+" - Gerçek Değer: "+str(int(y)), "white", "on_red", attrs=['bold'])
yanlis += 1
print("\n", "-"*150, "\nISTATISTIK:\nToplam ", toplam_veri, " Veri içersinde;\nDoğru Bilme Sayısı: ", dogru, "\nYanlış Bilme Sayısı: ",yanlis,
"\nBaşarı Yüzdesi: ", str(int(100*dogru/toplam_veri))+"%", sep="")
Eğer herhangi bir hata ile karşılaşmadan buraya kadar geldiyseniz artık python dosyanızı çalıştırabilirsiniz. Çalıştırdığınızda arkada tensorflow kütüphanesinin çalıştığına dair bir bilgilendirme mesajı da görebilirsiniz. Bendeki eğitim öğrenme yüzdesi:
Test verilerindeki başarı değeri ise;
Sonuç olarak; yapay zeka kendi başına çok derin ve ayrı bir yetkinlik isteyen konu. Daha değinmediğim birçok şey var. Ancak yazının başında da belirtiğim gibi zaten bu konuya en azından çalışma mantalitesi hakkında bilgi sahibi olduğunuzu varsayarak yazdım. Ağırlıkların neye göre hesaplandığı, eşik değerlerinin belirlenmesi, neye göre hangi aktivasyon fonksiyonunun kullanılacağı, regresyon, sınıflandırma baya birçok anlatılacak nokta var gördüğünüz üzere ancak benim burda yaptığım konuya yeteri kadar hakim olan birinin pythonda keras yardımıyla tensorflow kullanarak nasıl uygulama yapabileceğine dair giriş mahiyetinde bir örnekti. Artık her olasılık için bir kural tanımlama günümüz dünyasında yetersiz bir durumdur bu nedenle dev veriler karşısında kısmen de olsa mantıklı çıkarımlar yapacak sistemlere ihtiyacımız var. Geleceğin burda yattığı şüphesiz doğrudur. Hatta günümüzde bile farkında olmadan kullanmaya başladık bile. Karakter tanıma, yüz ve parmak izi tanıma, ses tanıma, dudak okuma diye gider.
Python ile Basit Bir Yapay Sinir Ağı Uygulaması
Günümüzde yapay zeka ve makine öğrenimi teknolojileri hızla gelişmekte ve birçok sektörde etkili hale gelmektedir. Bu gelişmelerle birlikte, yapay sinir ağları da popülerlik kazanmıştır. Özellikle Python dili, yapay zeka projelerinde en çok tercih edilen programlama dillerinden biridir. Bu yazıda, Python kullanarak basit bir yapay sinir ağı uygulaması geliştireceğiz. Ayrıca, bu tür algoritmaların Metin2 private server geliştirme süreçlerinde nasıl kullanılabileceğini de ele alacağız.
Yapay Sinir Ağları Nedir?
Yapay sinir ağları, insan beyninin çalışma mantığından esinlenerek geliştirilmiş algoritmalardır. Nöronlar arası bağlantılar gibi yapılar kullanılarak veriler üzerinde öğrenme, sınıflandırma veya tahmin gibi işlemleri gerçekleştirmektedir. Bu yapılar özellikle oyun yapay zekası ve otomatik sistemler için oldukça faydalıdır.
Python ile Yapay Sinir Ağı Oluşturmak
Python'da yapay sinir ağı oluşturmak için genellikle TensorFlow veya Keras gibi kütüphaneler kullanılır. Ancak biz burada daha basit bir yapı olan NumPy kütüphanesiyle temel bir sinir ağı örneği yapacağız.
Öncelikle gerekli kütüphaneleri yüklememiz gerekiyor:
Temel Yapay Sinir Ağı Kodu
Yukarıdaki kod parçasında, basit bir sinir ağı sınıfı tanımlanmış ve bir ileri yayılım işlemi gerçekleştirilmiştir. Bu tür yapılar, Metin2 oyun sunucularında AI tabanlı NPC davranışları oluşturmak için kullanılabilir.
Yapay Zeka ve Metin2 Geliştirme
Metin2 oyun geliştirme sürecinde, yapay sinir ağları kullanarak akıllı NPC'ler, savaş stratejileri, oyun içi karar sistemleri ve daha fazlasını inşa edebiliriz. Örneğin, oyuncunun geçmiş davranışlarına göre bir NPC'nin nasıl tepki vereceğini belirleyen bir model kurulabilir. Bu sayede oyun deneyimi daha zengin ve dinamik hale gelir.
Python GUI Kullanımı ile Entegrasyon
Python GUI araçları sayesinde, yapay zeka modellerimizi görsel arayüzlerle entegre edebiliriz. Bu sayede, Metin2 server yönetim sistemleri daha kullanıcı dostu hale getirilebilir. Örneğin, Tkinter veya PyQt kullanarak bir veri analiz arayüzü geliştirilebilir.
Sonuç
Python ile yapay sinir ağları oluşturmak, hem öğrenme hem de uygulama açısından oldukça değerlidir. Özellikle Metin2 özel sunucularında oyun yapay zekası geliştirmek isteyen geliştiriciler için bu yöntemler büyük avantaj sağlayabilir. Python’un esnekliği sayesinde, C++ ile yazılmış sistemlerle entegre çalışan algoritmalar da üretilebilir.
Simple Neural Network Application with Python
Today, artificial intelligence and machine learning technologies are rapidly evolving and becoming influential in many sectors. With these developments, neural networks have also gained popularity. Especially, Python language is one of the most preferred programming languages in AI projects. In this article, we will develop a simple neural network application using Python. Additionally, we will discuss how such algorithms can be utilized in Metin2 private server development processes.
What Are Neural Networks?
Neural networks are algorithms inspired by the functioning of the human brain. They perform operations like learning, classification, or prediction on data using structures similar to connections between neurons. These structures are particularly useful for game AI and automated systems.
Creating a Neural Network with Python
To create a neural network in Python, libraries like TensorFlow or Keras are commonly used. However, here we will implement a basic neural network example using the NumPy library.
First, we need to install the required libraries:
Basic Neural Network Code
In the above code snippet, a basic neural network class is defined and a forward propagation operation is performed. Such structures can be used to create AI-based NPC behaviors in Metin2 game servers.
Artificial Intelligence and Metin2 Development
In the Metin2 game development process, intelligent NPCs, combat strategies, in-game decision systems, and more can be built using neural networks. For example, a model can be created that determines how an NPC responds based on the player's past behavior. This makes the gaming experience richer and more dynamic.
Integration with Python GUI
With Python GUI tools, we can integrate our AI models with visual interfaces. This allows Metin2 server management systems to become more user-friendly. For instance, a data analysis interface can be developed using Tkinter or PyQt.
Conclusion
Building neural networks with Python is valuable both for learning and implementation purposes. Particularly for developers aiming to enhance game AI in Metin2 private servers, these methods can provide significant advantages. Thanks to Python’s flexibility, algorithms that work integrated with systems written in C++ can also be produced.
İşte bu noktadan sonra biyolojik olarak insan zekasının çalışma mantalitesinden esinlenerek yapay zeka tekniği geliştirilmeye başlandı ve hala ciddi çalışmalar ile devam etmektedir. Bu yazımızda yapay zekanın öğrenme tekniklerden biri olan yapay sinir ağı(YSA) mimarisini kullanarak python ile basit bir uygulama yapacağız. Bildiğiniz üzere python veri madenciliğinden, bilimsel çalışmalara, yapay zekadan siber güvenliğe kadar yelpazesi çok geniş olan bir dildir. Yapay sinir ağı konusunda çok ciddi kütüphaneleri de bulunmaktadır. Bunlardan bazıları coffe, theano, tensorflow, scikit, panda ve torch kütüphaneleridir.
Keras ise arkada tensorflow veya theano kütüphanesini kullanan bir arabirimdir. Biz ise keras ile arkada tensorflow kullanarak bir uygulama yapacağız. Tensorflow, google tarafından geliştirilmiş ve 2015 yılında bir kısmı public hale getirilen makina öğreniminde kullanılan ciddi bir kütüphanedir.
Ancak örnek uygulamamızı yazmaya geçmeden önce yapacağımız uygulamayı anlamak için yapay sinir ağı mimarisinin nasıl çalıştığını bilmemiz ve bu konudaki terminolojiye biraz hakim olmamız gerekmektedir. Bu sebeble kısa bir şekilde biraz değineceğiz. Ancak bu yazıyı konuya biraz hakim olduğunuzu ve yazacaklarımı hatırlamanız amacıyla yazdığımı belirtmek isterim.
Aşağıdaki resimde giriş ve ara katmanlar(hidden layers) olmak üzere üç katmanlı yapıya sahip bir yapay sinir ağı modeli görmektesiniz.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Yukarıdaki gördüğünüz her bir düğüm aslında bir yapay sinir hücresini temsil etmektedir. Ve bunlara perceptron denmektedir. Perceptronlar arasındaki çizgiler ise ağırlıkları temsil etmektedir. Ve bir perceptronun değeri; kendisinden bir önceki katmanda bulunan bütün perceptronlardaki değerin ilgili ağırlıklarıyla çarpıldıktan sonra bir toplam fonksiyonundan geçtikten sonra bulunan değerin bir aktivasyon fonksiyonundan geçmesi sonucu bir değere sahip olacaktır. Bu bulunan sonuç, bir sonraki katmana girdi olarak verilmektedir Anlatmak istediğimizi aşağıdaki resim açıkça izah etmektedir. Aşağıdaki resim, yukarıda gördüğünüz her düğüm içerisinde olan işlemleri göstermektedir.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Yandaki resimde Xi’ler bizim girdi değerlerimiz, Wi’ler ise ağırlıklarımızı ifade etmektedir. Her girdi kendi ağırlığıyla çarpıldıktan sonra çıkan değeri bir sonraki katmandaki bulunan perceptronlara aktarmaktadır ve bu perceptronda toplam fonksiyonundan geçtikten sonra çıkan değer aktivasyon fonksiyonuna göndererek ortaya nihai bir değer çıkacaktır. Ve varsa bu değer bir sonraki katmana aktarılarak bu döngü çıkışa varıncaya kadar böyle devam edecektir. Bu her değer için bu iterasyon yapılacaktır. Ve her iterasyonda uygun bir sonuç bulmak için ağırlıklar yeniden düzenlenecektir. Bu olaya epoch denilmektedir. Çünkü sonuçları etkileyen en önemli etkenlerden biri de ağırlık değerlerimizdir. En basit haliyle bir ysa modeli bu şekildedir. Şimdi ise verilerin bu model içerisinde nasıl işlenildiğine kısaca değinelim;
Elimizde bir dataset(veri kümesi) olur. Bu dataset bizim kullanacağımız teknik gereği birden fazla girdinin ama bir çıktının olacağı bir yapıya sahip olmalıdır. Örneğin; bir kullanıcının mouse hareketlerini, tıklama sayıları, girdiği siteleri, bu sitelerde kaldığı süre gibi çevresel değişkenleri alıp bu değerler sonunda bu kişinin bot mu? Insan mı? Değerini saklayan bir dataset düşünelim.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
10 bin kullanıcıdan alınan değerler sonucunda bu kişilerin bot mu? Insan mı? Olduğu değerini tutan böyle bir datasetimizin olduğunu varsayalım. Bu değerlerimiz gerçek değerlerdir. Yani herhangi bir lab ortamında bot davranışlarını tuttuklarını ve binlerce insanın bilgisayar kullanırken ki aktivitelerini kayıt altına aldıklarını düşünelim. Çünkü bizim ysa modelimiz bu örneklerden bir çıkarım yaparak kendisine daha önce hiç gösterilmemiş bir örnek gösterildiğinde bunun bot mu? Insan mı? Olduğunu bu gerçek değerlerle kendisini eğiterek bulacaktır. Ama öncesinde tabi ki de sistemimizin öğrenme eğitimini tamamlaması gerekir.
Biz bu 10 bin veriden 9 bin tanesini ysa modelimize eğitim verisi olarak vereceğiz. Eğitim verileri, bir ysa modelini eğitmek için verilen verilerdir. Bizim bu örneğimizde ise girdi ve çıktı değerlerinin olduğu veriye verilen isimdir. Çünkü modelimiz girdi değerleri ile çıktı arasında bir matematiksel model oluşturmaya çalışacak. Bu model oluştururken ağırlıklar, aktivasyon fonksiyonu, ara katmanlar, katmanlardaki perceptron sayıları gibi değişkenler değiştirilip en uygun değer bulunmaya çalışılır. Ve modelimiz belirlediğimiz bir eşik değerine vardığında öğrenme sona erer. Öğrenme bitmesi ysa modelimizin girdi ve çıktılarımız arasında bir matematiksel model bulduğu anlamına gelmektedir. Sistem eğitimi tamamladıktan sonra test etmemiz gerekmektedir. Testi ise 10 bin veriden bir köşeye ayırdğımız bin adet veriyle yapacağız. Ancak burda önemli olan nokta şudur; Test verilerimizi verdiğimiz de sadece girdi değişkenlerimizi vereceğiz. Yani o kişinin bot mu? Insan mı? Olduğu değerini vermeyeceğiz aksine modelimiz bu değeri kendisi bulacak. Ve bulacağı bu değeri gerçek değer ile mukayese ederek sistemimizin yüzde kaç başarılı olduğunu hesaplayacağız. Örneğin yüzde 90 ve üzeri bir başarı bizim için kabul edilebilir bir değer ise modelimiz başarılı olmuştur demektir. Zaten hiçbir ysa modeli size %100 kesin sonuçla bir değer veremez. Her zaman bir hata payı vardır ve olmak zorundadır. Çünkü sistem kendisi verilen değerlerden bir sonuç çıkarmaktadır. Eğer yüzde 100 doğru cevap veriyorsa bir sistem o sistem öğrenmemiş ezber yapmıştır. Bu duruma overfitting de denilmektedir.
Ayrıca dikkat ettiyseniz tabloları kullanıyoruz bu da YSA’da özellikle matrisleri çok yoğun kullanacağımız anlamına gelir. Zaten uygulamamızı yaptığımızda numpy kütüphanesini de kullanacağımızı göreceksiniz. Unutmadan aslında yaptığımız anlatığımız bunca şeyin arkada nasıl çalıştığını ve öğrenme dediğimiz o olayın nasıl gerçekleştirildiğini çok güzel simüle eden
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
kesinlikle bakınız. Parametrelerle oynayın, kurcalayın biraz işte Şimdi bir ysa modeli için bir kaç önemli hususu maddeler halinde verelim.
- <li data-xf-list-type="ul">Herşeyden önce sistemimizi eğiteceğimiz bir datasetine sahip olmalıyız. Bunun için belli başlı dataset repoları var.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız! Giriş yap veya üye ol.veZiyaretçiler için gizlenmiş link,görmek için üye olmalısınız! Giriş yap veya üye ol.adreslere bakabilirsiniz. <li data-xf-list-type="ul">Datasetinde bir sistemin öğrenmesi için yeterli sayıda veri bulunmalıdır. Az veri olursa sistem ezbere düşecektir. <li data-xf-list-type="ul">Datasetimizdeki veriler makul olmalıdır. Çünkü sistem o verileri kullanarak öğrenme yapmaktadır. <li data-xf-list-type="ul">Eksik ve yanlış verilerin olması sistemin öğrenmesini çok ciddi bir şekilde etkilemese de sistem belli bir seviyeden sonra öğrenemez. <li data-xf-list-type="ul">Eğitim verilerinizi aynı zamanda test verisi olarak hiçbir zaman kullanmayınız. Alacağınız sonuçlar sağlıklı olmayacaktır. Sistemin daha önce hiç görmediği veriler ile test ediniz.
Bu kadar cümleden sonra işin hikaye kısmını bitirdik ve artık teknik kısma geçmek için hazırız. Bizim kullanacağımız
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
yaklaşık 800 insanın vucudundan alınmış yaklaşık 8 değer var yani girdiler. Bunlar; hamilelik sayısı, plazma glukoz konsantrasyonu, diastolic kan basıncı, deri kalınlığı, kullanılan insulin miktarı, vucut kitle indexi, diyabet soyağacı ve yaş değerleridir. Ve son sutunda ise 1 veya 0 değeri yer almakta. Eğer 1 ise kişinin şeker hastası(diabet) olduğu, 0 ise diabet hastası olmadığı anlamına gelmektedir. Buradan ufak bir parantez açayım. Datasetimizdeki her verinin numerik olması gerekmektedir. Çünkü bu değerler üzerinde matematiksel işlemler yapılmaktadır. Çıkışlar bile numerik olmalıdır en azından o şekilde ifade edilmelidir. Öncellikle kullanacağımız kütüphaneleri varsa diğer projelerde kullandığımız kütüphaneleri etkilememesi için bir virtual environment kullanarak uygulamamızı diğer python kütüphanelerinde izole hale getireceğiz. Bunun için;$sudo pip3 install virtualenvKurulum bitince ardından ;$sudo virtualenv kerasdiyerek keras adından bir izola ortam oluşturup;source /bin/activatediyerek izole ortamımızı aktif hale getirelim. Şimdi ihtiyaç duyacağımız kütüphanleri yükleyelim.$sudo pip3 install numpy $sudo pip3 install tensorflow $sudo pip3 install keras
İşlem bittiğinde uygulamamız için gerekli herşey hazır demektedir. Artık python kodumuzu yazmaya başlayabiliriz. Öncellikle kullanacağımız paketleri import edelim.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
2
3
4
5
6
7
8
9
10
11
#Kullanacağımız ysa modeli için.
from keras.models import Sequential
#YSA modelimizde katmanlar oluşturabilmek için.
from keras.layers import Dense
#Çıktımızı terminalden aldığımızda sonuçları renklendiriyoruz. Yanlışlar kırmızı, doğrular yeşil. Bunu kullanmasanızda olur yani.
from termcolor import cprint
#YSA matrislerle çalıştığı için numpy olmazsa olmaz.
import numpy
Datasetimizi yüklüyoruz.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
numpy kütüphanesindeki loadtxt() metodumuz verilen ilk parametredeki dosya/string I delimiter(ayırıcı) ile split ederek bir matrise atamaktadır. Datesetimizi ayrıştırıyoruz. X, 8 adet girdimiz. Yani 600 satır ve 8 sutun. Y ise çıkışımız 600 satır 1 sutundan oluşmaktadır. Eğer bu parçalamayı anlamadıysanız lütfen
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
konuya bakınız.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
2
X = dataset[:600,0:8]
Y = dataset[:600,8]
Şimdi modelimizi oluşturup katmanlarımızı yerleştirelim. Modelimizden model adında bir nesne türettik.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
model = Sequential()
Ve ilk katmanımızı modelimize add metodu ile dense tipindeki katmanımızı ekliyoruz. Parametrelerden 12 olanı ilk katmandaki perceptron sayısı. İnput dim bizim girdi değer sayımız. Hatırlarsanız 8 değerimiz vardı. Init parametremiz yapay sinir hücrelerimiz arasındaki ağırlıklarımızın rastgele verilmesi yerine belli bir algoritmaya göre vermektedir. Aktivation ise o katmanda kullandığımız aktivasyon fonksiyonumuz.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
model.add(Dense(20, input_dim=8, init='uniform', activation='relu'))
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
2
3
4
5
6
7
8
9
10
11
#İkinci katmanımızda 12 yapay sinir hücresi.
model.add(Dense(12, init='uniform', activation='relu'))
#Üçüncü katmanımızda 8 yapay hücremiz var.
model.add(Dense(8, init='uniform', activation='sigmoid'))
#Dördüncü katmanımızda 1 yapay hücremiz var. Yani çıkışımız.
model.add(Dense(1, init='uniform', activation='sigmoid'))
#Modelimizi derliyoruz.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Modelimizi çalıştırıyoruz. İlk parametre girdilerimiz, ikincic parametre çıktığımız. 3. paramtre epoch değerimiz. Yani ağırlıkların yeniden düzenleyerek çözüme en yakın değeri buluncaya kadar yapacağı deneme sayısı. Batch size tek seferde alınacak veri sayısını ifade etmektedir. Verbose ise herhangi bir hata oluşması durumunda göstermemeisini istedik.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
model.fit(X, Y, nb_epoch=150, batch_size=10, verbose=2)
Modelimizin başarı yüzdesini hesaplıyoruz.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
scores = model.evaluate(X, Y)
Ve son olarak modelimizin sonucunu ekrana basıyoruz.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
Evet buraya kadar modelimiz verdiğimiz örnekleri kullanarak girdi ve çıktılar arasında ilişkisel olarak bir model buldu ve eğitim sona erdi. Bundan sonra sisteme test verilerimizi vererek ne kadar başarılı bir sonuç bulduğunu hesaplayacağız. Şimdi köşeye ayırdığımız 1000 değeri sistemimize vereceğiz ve ysa modelimizin bulduğu sonuçlar ile gerçek sonuçları karşılaştırıp ne kadar başarılı olduğunu görelim. Aşağıdaki kodlarıda yine aynı python dosyasına yazarak devam edelim.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
2
3
4
5
#96 adet test verimizin sadece 8 girdisini sisteme veriyoruz.
test_verisi = dataset[600:696, 0:8]
#Sistemin verdiğimiz değerlerden yola çıkarak kişinin diyabet hastası olup olmadığını tahmin ediyor.
predictions = model.predict(test_verisi)
Buradan sonrası ise sonuçları ekrana basma olayı.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dogru = 0
yanlis = 0
toplam_veri = len(dataset[600:696,8])
for x, y in zip(predictions, dataset[600:696,8]):
x = int(numpy.round(x[0]))
if int(x) == y:
cprint("Tahmin: "+str(x)+" - Gerçek Değer: "+str(int(y)), "white", "on_green", attrs=['bold'])
dogru += 1
else:
cprint("Tahmin: "+str(x)+" - Gerçek Değer: "+str(int(y)), "white", "on_red", attrs=['bold'])
yanlis += 1
print("\n", "-"*150, "\nISTATISTIK:\nToplam ", toplam_veri, " Veri içersinde;\nDoğru Bilme Sayısı: ", dogru, "\nYanlış Bilme Sayısı: ",yanlis,
"\nBaşarı Yüzdesi: ", str(int(100*dogru/toplam_veri))+"%", sep="")
Eğer herhangi bir hata ile karşılaşmadan buraya kadar geldiyseniz artık python dosyanızı çalıştırabilirsiniz. Çalıştırdığınızda arkada tensorflow kütüphanesinin çalıştığına dair bir bilgilendirme mesajı da görebilirsiniz. Bendeki eğitim öğrenme yüzdesi:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Test verilerindeki başarı değeri ise;
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Sonuç olarak; yapay zeka kendi başına çok derin ve ayrı bir yetkinlik isteyen konu. Daha değinmediğim birçok şey var. Ancak yazının başında da belirtiğim gibi zaten bu konuya en azından çalışma mantalitesi hakkında bilgi sahibi olduğunuzu varsayarak yazdım. Ağırlıkların neye göre hesaplandığı, eşik değerlerinin belirlenmesi, neye göre hangi aktivasyon fonksiyonunun kullanılacağı, regresyon, sınıflandırma baya birçok anlatılacak nokta var gördüğünüz üzere ancak benim burda yaptığım konuya yeteri kadar hakim olan birinin pythonda keras yardımıyla tensorflow kullanarak nasıl uygulama yapabileceğine dair giriş mahiyetinde bir örnekti. Artık her olasılık için bir kural tanımlama günümüz dünyasında yetersiz bir durumdur bu nedenle dev veriler karşısında kısmen de olsa mantıklı çıkarımlar yapacak sistemlere ihtiyacımız var. Geleceğin burda yattığı şüphesiz doğrudur. Hatta günümüzde bile farkında olmadan kullanmaya başladık bile. Karakter tanıma, yüz ve parmak izi tanıma, ses tanıma, dudak okuma diye gider.
Python ile Basit Bir Yapay Sinir Ağı Uygulaması
Günümüzde yapay zeka ve makine öğrenimi teknolojileri hızla gelişmekte ve birçok sektörde etkili hale gelmektedir. Bu gelişmelerle birlikte, yapay sinir ağları da popülerlik kazanmıştır. Özellikle Python dili, yapay zeka projelerinde en çok tercih edilen programlama dillerinden biridir. Bu yazıda, Python kullanarak basit bir yapay sinir ağı uygulaması geliştireceğiz. Ayrıca, bu tür algoritmaların Metin2 private server geliştirme süreçlerinde nasıl kullanılabileceğini de ele alacağız.
Yapay Sinir Ağları Nedir?
Yapay sinir ağları, insan beyninin çalışma mantığından esinlenerek geliştirilmiş algoritmalardır. Nöronlar arası bağlantılar gibi yapılar kullanılarak veriler üzerinde öğrenme, sınıflandırma veya tahmin gibi işlemleri gerçekleştirmektedir. Bu yapılar özellikle oyun yapay zekası ve otomatik sistemler için oldukça faydalıdır.
Python ile Yapay Sinir Ağı Oluşturmak
Python'da yapay sinir ağı oluşturmak için genellikle TensorFlow veya Keras gibi kütüphaneler kullanılır. Ancak biz burada daha basit bir yapı olan NumPy kütüphanesiyle temel bir sinir ağı örneği yapacağız.
Öncelikle gerekli kütüphaneleri yüklememiz gerekiyor:
Kod:
pip install numpy
Temel Yapay Sinir Ağı Kodu
Kod:
import numpy as np[BR][/BR][BR][/BR]def sigmoid(x):[BR][/BR] return 1 / (1 + np.exp(-x))[BR][/BR][BR][/BR]class NeuralNetwork:[BR][/BR] def __init__(self):[BR][/BR] self.weights = np.random.rand(2, 1)[BR][/BR] self.bias = np.random.rand(1)[BR][/BR][BR][/BR] def feedforward(self, inputs):[BR][/BR] output = sigmoid(np.dot(inputs, self.weights) + self.bias)[BR][/BR] return output[BR][/BR][BR][/BR]nn = NeuralNetwork()[BR][/BR]inputs = np.array([2, 7]) # Örnek girdi[BR][/BR]output = nn.feedforward(inputs)[BR][/BR]print(output)
Yukarıdaki kod parçasında, basit bir sinir ağı sınıfı tanımlanmış ve bir ileri yayılım işlemi gerçekleştirilmiştir. Bu tür yapılar, Metin2 oyun sunucularında AI tabanlı NPC davranışları oluşturmak için kullanılabilir.
Yapay Zeka ve Metin2 Geliştirme
Metin2 oyun geliştirme sürecinde, yapay sinir ağları kullanarak akıllı NPC'ler, savaş stratejileri, oyun içi karar sistemleri ve daha fazlasını inşa edebiliriz. Örneğin, oyuncunun geçmiş davranışlarına göre bir NPC'nin nasıl tepki vereceğini belirleyen bir model kurulabilir. Bu sayede oyun deneyimi daha zengin ve dinamik hale gelir.
Python GUI Kullanımı ile Entegrasyon
Python GUI araçları sayesinde, yapay zeka modellerimizi görsel arayüzlerle entegre edebiliriz. Bu sayede, Metin2 server yönetim sistemleri daha kullanıcı dostu hale getirilebilir. Örneğin, Tkinter veya PyQt kullanarak bir veri analiz arayüzü geliştirilebilir.
Sonuç
Python ile yapay sinir ağları oluşturmak, hem öğrenme hem de uygulama açısından oldukça değerlidir. Özellikle Metin2 özel sunucularında oyun yapay zekası geliştirmek isteyen geliştiriciler için bu yöntemler büyük avantaj sağlayabilir. Python’un esnekliği sayesinde, C++ ile yazılmış sistemlerle entegre çalışan algoritmalar da üretilebilir.
Simple Neural Network Application with Python
Today, artificial intelligence and machine learning technologies are rapidly evolving and becoming influential in many sectors. With these developments, neural networks have also gained popularity. Especially, Python language is one of the most preferred programming languages in AI projects. In this article, we will develop a simple neural network application using Python. Additionally, we will discuss how such algorithms can be utilized in Metin2 private server development processes.
What Are Neural Networks?
Neural networks are algorithms inspired by the functioning of the human brain. They perform operations like learning, classification, or prediction on data using structures similar to connections between neurons. These structures are particularly useful for game AI and automated systems.
Creating a Neural Network with Python
To create a neural network in Python, libraries like TensorFlow or Keras are commonly used. However, here we will implement a basic neural network example using the NumPy library.
First, we need to install the required libraries:
Kod:
pip install numpy
Basic Neural Network Code
Kod:
import numpy as np[BR][/BR][BR][/BR]def sigmoid(x):[BR][/BR] return 1 / (1 + np.exp(-x))[BR][/BR][BR][/BR]class NeuralNetwork:[BR][/BR] def __init__(self):[BR][/BR] self.weights = np.random.rand(2, 1)[BR][/BR] self.bias = np.random.rand(1)[BR][/BR][BR][/BR] def feedforward(self, inputs):[BR][/BR] output = sigmoid(np.dot(inputs, self.weights) + self.bias)[BR][/BR] return output[BR][/BR][BR][/BR]nn = NeuralNetwork()[BR][/BR]inputs = np.array([2, 7]) # Example input[BR][/BR]output = nn.feedforward(inputs)[BR][/BR]print(output)
In the above code snippet, a basic neural network class is defined and a forward propagation operation is performed. Such structures can be used to create AI-based NPC behaviors in Metin2 game servers.
Artificial Intelligence and Metin2 Development
In the Metin2 game development process, intelligent NPCs, combat strategies, in-game decision systems, and more can be built using neural networks. For example, a model can be created that determines how an NPC responds based on the player's past behavior. This makes the gaming experience richer and more dynamic.
Integration with Python GUI
With Python GUI tools, we can integrate our AI models with visual interfaces. This allows Metin2 server management systems to become more user-friendly. For instance, a data analysis interface can be developed using Tkinter or PyQt.
Conclusion
Building neural networks with Python is valuable both for learning and implementation purposes. Particularly for developers aiming to enhance game AI in Metin2 private servers, these methods can provide significant advantages. Thanks to Python’s flexibility, algorithms that work integrated with systems written in C++ can also be produced.
