2017-12-23 2 views
0

ReLUアクティベーション機能を使用して次の入力番号を印刷しようとしています。私はネットワークを何度か訓練しましたが、私は出力を0にしました。ReLUニューラルネットワークのみ0を返します

ここに私が実装しようとしているコードです。誰かが私が間違っていることを教えてもらえますか?

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'はスカラーです。したがって、 'np.dot'はスカラーをwllとして返します。ランタイムエラーが発生することなく 'relu'の中で' len'をどのように呼び出すことができますか? – Omni

+0

スカラーとベクトルの内積はベクトルです。ベクトルのすべての要素にスカラーを乗算するだけです。入力= np.array([1,2,3,4,5,6,7,8,9]) print np.dot(input、2) プリント2 *入力 –

答えて

0

コードの調整変数が大きな値であり、それに重みをincreamentingときに、出力は、私は調整値を減少させることによって体重をインクリメントし、iは出力を持って0 あります。

self.weights += adjustments/10000 

入力18と19が19と20として出力されました。

関連する問題