2017-12-23 2 views
0

Ich versuche, die nächste Nummer der Eingabe mit ReLU Aktivierungsfunktion zu drucken. Ich trainierte das Netzwerk mehrmals, aber ich bekam den Ausgang als 0.ReLU neuronales Netzwerk gibt nur 0

Hier ist der Code, den ich versuche zu implementieren. Kann mir jemand sagen, was ich falsch mache?

import numpy as np,random 

class NeuralNetwork(): 

    def _init_(self): 
     random.seed(1) 
     self.weights = 0.5 

    def relu(self,x): 
     for i in range(0,len(x)): 
      if x[i]>0: 
      pass 
      else: 
      x[i]=0 
     return x 

    def relu_derv(self,x): 
     for i in range(0,len(x)): 
      if x[i]>0: 
      x[i]=1 
      else: 
      x[i]=0 
     return x 

    def train(self,input ,output,iterations): 
     for i in xrange(iterations): 
      out = self.think(input) 
      error = output-out 
      adjustments = np.dot(input.T,error*self.relu_derv(out)) 
      self.weights += adjustments 

    def think(self,input): 
     return self.relu(np.dot(input,self.weights)) 


if _name_=="__main__": 
neural= NeuralNetwork() 
print "before train weights" 
print neural.weights 
input = np.array([1,2,3,4,5,6,7,8,9]) 
output = np.array([2,3,4,5,6,7,8,9,10]).T 
print input 
neural.train(input,output,100000) 

print "after train weights" 
print neural.weights 
print "neural" 
a=[13,15] 
print neural.think(a) 
+0

'self.weights' ist ein Skalar. Daher gibt 'np.dot' einen Skalar als wll zurück. Wie kann man 'len' innerhalb von' relu' nennen, ohne einen Laufzeitfehler zu bekommen? – Omni

+0

Skalarprodukt und Vektor ist ein Vektor. es multipliziert nur den Skalar zu jedem Element in Vektor no diff zwischen Eingang = np.array ([1,2,3,4,5,6,7,8,9]) Drucken np.dot (Eingang, 2) Druck 2 * Eingabe –

Antwort

0

Die Einstellgröße in dem Code ist so großer Wert, wenn increamenting Gewicht mit sich, die Ausgabe ist 0. i inkrementiert Gewicht nur durch Einstellwert verringert und ich habe die Ausgabe.

self.weights += adjustments/10000 

Für die Eingänge 18 und 19 wurde als 19 und 20 ausgegeben.