Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie ein zweischichtiges neuronales Netzwerk und ein Perzeptronmodell in Python

So implementieren Sie ein zweischichtiges neuronales Netzwerk und ein Perzeptronmodell in Python

php中世界最好的语言
php中世界最好的语言Original
2017-12-20 13:08:272104Durchsuche

In diesem Artikel erfahren Sie, wie Sie mit Python ein zweischichtiges neuronales Netzwerk und ein Perzeptronmodell implementieren. Der spezifische Inhalt und die Beispiele sind wie folgt als Referenz

Python 3.4 Weil Numpy verwendet wird

Hier implementieren wir zunächst ein Perzeptronmodell, um die folgende Entsprechung zu erreichen


[[0,0,1], ——- 0 
 [0,1,1], ——- 1 
 [1,0,1], ——- 0 
 [1,1,1]] ——- 1
Wie aus den obigen Daten ersichtlich ist: die Der Eingang besteht aus drei Kanälen, der Ausgang ist einkanalig.



Die Aktivierungsfunktion

hier wir verwenden die Sigmoidfunktion f(x)=1/(1+exp(-x))

Die abgeleitete Ableitung lautet wie folgt:


L0=W*X;
 z=f(L0);
 error=y-z;
 delta =error * f'(L0) * X;
 W=W+delta;
Der Python-Code lautet wie folgt:

import numpy as np
 
#sigmoid function
 
def nonlin(x, deriv = False):
  if(deriv==True):
    return x*(1-x)
  return 1/(1+np.exp(-x))
 
 
# input dataset
 
X=np.array([[0,0,1],
      [0,1,1],
      [1,0,1],
      [1,1,1]])
 
# output dataset
 
y=np.array([[0,1,0,1]]).T
 
#seed( ) 用于指定随机数生成时所用算法开始的整数值,
#如果使用相同的seed( )值,则每次生成的随即数都相同,
#如果不设置这个值,则系统根据时间来自己选择这个值,
#此时每次生成的随机数因时间差异而不同。
np.random.seed(1) 
 
# init weight value with mean 0
 
syn0 = 2*np.random.random((3,1))-1  
 
for iter in range(1000):
  # forward propagation
  L0=X
  L1=nonlin(np.dot(L0,syn0))
 
  # error
  L1_error=y-L1
 
  L1_delta = L1_error*nonlin(L1,True)
 
  # updata weight
  syn0+=np.dot(L0.T,L1_delta)
 
print("Output After Training:")
print(L1)


Aus den Ausgabeergebnissen ist ersichtlich, dass die entsprechende Beziehung grundsätzlich erreicht wird.

Als nächstes wird ein zweischichtiges Netzwerk verwendet, um die obige Aufgabe zu erfüllen. Hier wird eine verborgene Schicht hinzugefügt, und die verborgene Schicht enthält 4 Neuronen.


   
import numpy as np
 
def nonlin(x, deriv = False):
  if(deriv == True):
    return x*(1-x)
  else:
    return 1/(1+np.exp(-x))
 
#input dataset
X = np.array([[0,0,1],
       [0,1,1],
       [1,0,1],
       [1,1,1]])
 
#output dataset
y = np.array([[0,1,1,0]]).T
 
#the first-hidden layer weight value
syn0 = 2*np.random.random((3,4)) - 1
 
#the hidden-output layer weight value
syn1 = 2*np.random.random((4,1)) - 1
 
for j in range(60000):
  l0 = X     
  #the first layer,and the input layer
  l1 = nonlin(np.dot(l0,syn0))
  #the second layer,and the hidden layer
  l2 = nonlin(np.dot(l1,syn1))
  #the third layer,and the output layer
 
 
  l2_error = y-l2   
  #the hidden-output layer error
 
  if(j%10000) == 0:
    print "Error:"+str(np.mean(l2_error))
 
  l2_delta = l2_error*nonlin(l2,deriv = True)
 
  l1_error = l2_delta.dot(syn1.T)  
  #the first-hidden layer error
 
  l1_delta = l1_error*nonlin(l1,deriv = True)
 
  syn1 += l1.T.dot(l2_delta)
  syn0 += l0.T.dot(l1_delta)
 
print "outout after Training:"
print l2


Ich glaube, dass Sie die Methode beherrschen, nachdem Sie diese Fälle gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Fällen Artikel auf der chinesischen PHP-Website!

Verwandte Lektüre:

Detailliertes Codebeispiel, wie PHP die Stack-Datenstruktur und den Bracket-Matching-Algorithmus implementiert

Am beliebtesten Code in PHP Einfacher String-Matching-Algorithmus, PHP-Matching-Algorithmus_PHP-Tutorial

Das einfachste String-Matching-Algorithmus-Tutorial in PHP

Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein zweischichtiges neuronales Netzwerk und ein Perzeptronmodell in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn