Python ile (kodla) basit bir sinir ağı oluşturmayı öğretir

Yazar: Michael J.Garbade

Çeviri: Chen Zhiyan

Redaksiyon: Ding Nanya

Bu makale toplam 2000 kelimedir, 9 okunması önerilir. dakika.

Bu makale size bir sinir ağının nasıl oluşturulacağını gösterecek ve sinir ağlarının nasıl çalıştığını derinlemesine anlamanızı sağlayacaktır.

Sinir ağlarının nasıl çalıştığını anlamanın en iyi yolu, kendiniz bir sinir ağı oluşturmaktır Bu makale bunun nasıl yapılacağını gösterecektir.

Yapay sinir ağı (YSA) olarak da bilinen sinir ağı (NN), makine öğrenimi alanındaki biyolojik sinir ağları kavramına dayanan öğrenme algoritmalarının bir alt kümesidir.

Beş yıldan fazla deneyime sahip bir Alman makine öğrenimi uzmanı olan Andrey Bulezyuk şunları iddia etti: "Sinir ağları, makine öğreniminde devrim yaratıyor çünkü çok çeşitli disiplinlerde ve endüstrilerde soyut nesneleri verimli bir şekilde modelleyebiliyorlar."

Yapay bir sinir ağı temelde aşağıdaki bileşenlerden oluşur:

  • Giriş katmanı: Veri alın ve iletin
  • Gizli katman
  • Çıktı katmanı
  • Katmanlar arasında Ağırlıklar
  • Her gizli katmanda bir Aktivasyon fonksiyonu . Bu basit sinir ağı Python eğitiminde Sigmoid aktivasyon fonksiyonunu kullanacağız.

Pek çok sinir ağı türü vardır. Bu projede, ileri beslemeli veya algısal bir sinir ağı oluşturacağız. Bu tür YSA, verileri doğrudan önden arkaya aktarır.

İleri beslemeli nöronların eğitimi, genellikle ağa karşılık gelen girdi ve çıktı kümelerini sağlayan geri yayılımı gerektirir. Giriş verileri nörona gönderildiğinde, işlendikten sonra bir çıktı üretilir.

Aşağıdaki şema basit bir sinir ağının yapısını göstermektedir:

Bir sinir ağının nasıl çalıştığını anlamanın en iyi yolu, sıfırdan bir sinir ağının nasıl kurulacağını öğrenmektir (herhangi bir kitaplık kullanmak yerine).

Bu makalede, Python programlama dilini kullanarak basit bir sinir ağının nasıl oluşturulacağını göstereceğiz.

sorun

Aşağıda sorunu gösteren bir tablo bulunmaktadır.

Yeni bir veri seti sağlayacağız ve onu sinir ağını doğru çıktı değerini tahmin edebilecek şekilde eğitmek için kullanacağız.

Yukarıdaki tabloda gösterildiği gibi, çıkış değeri her zaman giriş bölümündeki ilk değere eşittir. Bu nedenle çıktı değerinin 1 olmasını bekliyoruz.

Aynı sonucu almak için Python kodunu kullanıp kullanamayacağımızı görelim (bu makalenin sonunda bu projenin kodunu dikkatlice okuyabilir ve ardından bu makaleyi okumaya devam edebilirsiniz).

Bir NeuralNetwork sınıfı oluşturun

Python'u, doğru tahminler vermek için nöronları eğitmek üzere bir NeuralNetwork sınıfı oluşturmak için kullanacağız. Bu sınıfın başka yardımcı işlevleri de olacaktır.

Bu basit sinir ağı örneğinde sinir ağı kitaplığını kullanmayacak olsak bile, hesaplamaya yardımcı olması için numpy kitaplığını içe aktaracağız.

Numpy kitaplığı aşağıdaki dört önemli yöntemi sağlar:

  • tecrübe - Doğal indeks oluşturmak için kullanılır
  • dizi -Matrisi oluşturmak için kullanılır
  • nokta Matris çarpımı için kullanılır
  • rastgele -Rastgele sayılar üretmek için kullanılır. Etkili dağıtımlarını sağlamak için rastgele sayılar oluşturacağımızı lütfen unutmayın.

1. Sigmoid işlevini uygulayın

Sinir ağının aktivasyon fonksiyonu olarak karakteristik bir "S" eğrisi çizmek için Sigmoid fonksiyonunu kullanacağız.

Bu işlev, herhangi bir değeri 0 ile 1 arasındaki bir değere eşleyebilir ve girişi ağırlıklandırmamıza ve normalleştirmemize yardımcı olur.

Bundan sonra, ağırlığın ayarlama parametrelerini hesaplamaya yardımcı olmak için Sigmoid fonksiyonunun türevini oluşturacağız.

Sigmoid işlevinin çıktısı, türevini oluşturmak için kullanılabilir. Örneğin, çıktı değişkeni "x" ise, türevi x * (1-x) olur.

2. Modeli eğitmek

Bu, sinir ağlarına doğru tahminlerde bulunmayı öğrettiğimiz aşamadır. Her girişin bir ağırlığı vardır - pozitif veya negatif olabilir. Bunun anlamı: Daha büyük pozitif veya negatif ağırlıklara sahip girdilerin, sonucun çıktısı üzerinde daha büyük bir etkisi olacaktır. Unutmayın, başlangıçta her rastgele sayıya bir ağırlık atayarak başladık.

İşte bu sinir ağı örneğinin eğitim süreci:

ilk adım: Girdi, eğitim veri setinden çıkarılır, eğitim veri setinin ağırlığına göre ayarlanır ve sinir ağının çıktısını hesaplama yöntemiyle filtrelenir. İkinci adım: Geri yayılma hata oranını hesaplayın. Bu durumda, nöronun tahmin edilen çıkışı ile eğitim veri setinin beklenen çıkışı arasındaki farktır. üçüncü adım: Hata ağırlıklı türev formülü kullanılarak, elde edilen hata aralığına göre daha küçük bazı ağırlık ayarlamaları yapılmıştır. dördüncü adım: Bu işlemin 15.000 yinelemesini gerçekleştirin. Her yinelemede, tüm eğitim seti aynı anda işlenir.

Matrisi yatay konumdan dikey konuma dönüştürmek için ".T" işlevini kullanırız. Bu nedenle, numaralar şu şekilde saklanacaktır:

Sonuç olarak, nöronların ağırlıkları, sağlanan eğitim verilerine göre optimize edilecektir. Daha sonra nörondan önceki durumla aynı olan yeni bir durumu düşünmesi istenirse doğru bir tahmin yapabilir. Geri yayılma yolu budur.

Paketle ve koş

Son olarak, NeuralNetwork sınıfı başarıyla başlatıldıktan sonra kod çalıştırılabilir.

Bir Python projesinde bir sinir ağının nasıl oluşturulacağının tam kodu:

numpy'yi np sınıfı olarak içe aktar NeuralNetwork (): def __init __ (self): # rastgele sayı üretimi için tohumlama np.random.seed (1) # ağırlıkları -1'den 1'e ve ortalama 0 self olan 3'e 1 matrise dönüştürme .synaptic_weights = 2 * np.random.random ((3, 1)) - 1 def sigmoid (self, x): # sigmoid işlevini uygulamak return 1 / (1 + np.exp (-x)) def sigmoid_derivative (self , x): #Sigmoid işlevinin türevi dönüş x * (1-x) def train (self, training_inputs, training_outputs, training_iterations): # Aralıktaki yineleme için ağırlıkları sürekli olarak ayarlarken doğru tahminler yapmak için modeli eğitme (eğitim_iterasyonları) : # nöron çıkışı yoluyla eğitim verilerini sifonlayın = self.think (training_inputs) # geri yayılma hatası için hesaplama hata oranı = training_outputs-output # ağırlık ayarlamalarını yapma = np.dot (training_inputs.T, error * self.sigmoid_derivative ( çıktı)) self.synaptic_weights + = ayarlamalar def think (self, inputs): # girişleri nöron yoluyla geçirmek çıktı almak için # değerleri floats inputs'a dönüştürmek = inputs.astype (float) output = self.sigmoid (np.dot (inputs, self.synaptic_weights)) __name__ == "__main__" ise dönüş çıktı: # nöron sınıfını başlatma neural_network = NeuralNetwork () print ("Rastgele Oluşturulan Ağırlıklar Başlıyor:") print (neural_network.synaptic_weights) # eğitim verileri 4 örnekten - 3 giriş değeri ve 1 çıkış training_inputs = np.array () training_outputs = np.array (). T #training going place neural_network.train (training_inputs, training_outputs, 15000) print ("Eğitimden Sonra Ağırlıkları Bitirme:") print (neural_network.synaptic_weights) user_input_one = str (input ("Bir Kullanıcı Girişi:")) user_input_two = str (input ( "Kullanıcı Girişi İki:")) user_input_three = str (input ("Üçüncü Kullanıcı Girişi:")) print ("Yeni Durumu Düşünüyor:", user_input_one, user_input_two, user_input_three) print ("Yeni Çıktı verisi:") print (neural_network. düşün (np.array ())) print ("Vay canına, başardık!")

Kodu çalıştırdıktan sonraki çıktı:

Bu şekilde, başarılı bir şekilde basit bir sinir ağı oluşturduk.

Nöronlar önce kendilerine rastgele ağırlıklar atarlar ve sonra kendilerini eğitmek için eğitim örneklerini kullanırlar.

Bundan sonra, yeni bir durum belirirse, 0,9999584 değerini alacaktır.

İstediğimiz doğru cevabın 1 olduğunu hatırlıyor musunuz?

Bu değer çok yakındır ve Sigmoid fonksiyonunun çıktı değeri 0 ile 1 arasındadır.

Elbette, bu örnekte, basit görevleri tamamlamak için yalnızca bir nöron ağı kullanıyoruz. Binlerce yapay sinir ağını birbirine bağlarsak ne olur? İnsan düşüncesini tamamen taklit edebilir miyiz?

Yazar hakkında: Dr. Michael J. Garbade, Los Angeles Blockchain Education Company'nin (LiveEdu) kurucusu ve CEO'sudur. Gelecekteki teknik alanda (makine öğrenimi dahil) eksiksiz bir ürün oluşturmak için öğrencilere pratik beceriler kazandıran dünyanın önde gelen eğitim ve öğretim platformudur.

Orjinal başlık:

Python'da Basit Bir Sinir Ağı Nasıl Oluşturulur

Orijinal bağlantı:

https://www.kdnuggets.com/2018/10/simple-neural-network-python.html

Çevirmen Profili

Chen Zhiyan, Pekin Jiaotong Üniversitesi'nden iletişim ve kontrol mühendisliği alanında yüksek lisans derecesi ile mezun olmuştur. Great Wall Computer Software and System Company'de mühendis ve Datang Microelectronics'te mühendis olarak hizmet vermiştir. Şu anda Beijing Wuyichaoqun Technology Co., Ltd.'nin teknik destekçisidir. Şu anda akıllı çeviri öğretim sistemlerinin işletimi ve bakımı ile uğraşmaktadır ve yapay zeka derin öğrenme ve doğal dil işleme (NLP) konusunda belirli deneyimler edinmiştir. Boş zamanlarımda çeviri oluşturmayı seviyorum. Başlıca çeviri çalışmaları arasında şunlar yer alıyor: IEC-ISO 7816, Irak Petrol Mühendisliği Projesi, Yeni Mali İşler Beyannamesi, vb. Çince-İngilizce çalışması "Yeni Mali İşler Bildirgesi" resmi olarak GLOBAL TIMES'te yayınlandı. Sizinle iletişim kurmak, paylaşmak ve birlikte ilerleme kaydetmek umuduyla boş zamanımı THU Data Pie platformundaki çeviri gönüllüleri grubuna katılmak için kullanabilir miyim

- Bitiş -

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

GIF- Süper Lig'deki ilk katil geri döndüğünde, Chongqing'in SIPG 2-0 öne geçmesine yardım etmek için pas geç!
önceki
Wuhan'daki çeşitli bölgelerin en son performans sıralaması, bu bölge art arda üç ilke imza attı Günaydın Wuhan (sesli versiyon)
Sonraki
Dünyanın en iyi konuşma tanıma bilimcisi Dr. Huang Xuedong CCL 2018 açılış raporu (PPT ile)
Dünya elemeleri - Kane iki gol attı, İngiltere 4-0 Hummels, yedi maçta Almanya 2-1 galibiyet aldı
8:1 Li Keqiang Musk ile tanışıyor; 100 milyon kullanıcı üç gün boyunca arkadaş çevresinde görülebilir; Youku, Toutiao tarafından satın alındığını reddediyor
Wuhan'da bu sokaklarda grafiti lekeleri var
Yapay zeka yeteneği için 12.113 pozisyon rekabet ediyor! Çin, en çok yapay zeka iş pozisyonuna sahip ülke haline geldi
Lei Jun, şehrin samimiyetinden ve avantajlarından etkilendi: Wuhan, ikinci karargah için seçildi!
Tsinghua Üniversitesi'nde "Hesaplamalı Sosyal Bilimler Veri Platformu" yayınlandı
Dünya ön elemeleri - Paulinhocu kuş golü attı, nadiren hedeflenen tekleme, Brezilya 2-0 Ekvador
Dünya ön elemeleri - Messi Suarez Misfire, Uruguay 0-0 Arjantin
Sıfırdan bire: derin öğrenmeyi bilmenizi sağlar!
Tabana Yılbaşı ziyareti 39 | Farklı bir Yeni Yıl lezzeti mi arıyorsunuz? "Minshu" yu dağlara yerleştirin
Resimli Wuhan | "Kardeş Şehir Yarış Günü" Açık düzenlendi
To Top