2017-11-02 9 views
0

単純なニューラルネットワークの場合は、tutorialの直後にあります。それは本当に私がそのコンセプトを理解するのを助けました。しかし、私がちょうど0でテストすると、[0,0,0]は、〜0の代わりに0.5を返します。それはなぜそれをするのですか? 〜0を返すために何を変えなければならないのですか?ニューラルネットワークは0の代わりに0.5を返します

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ]) 
y = np.array([[0,1,1,0]]).T 
syn0 = 2*np.random.random((3,4)) - 1 
syn1 = 2*np.random.random((4,1)) - 1 
for j in xrange(60000): 
    l1 = 1/(1+np.exp(-(np.dot(X,syn0)))) 
    l2 = 1/(1+np.exp(-(np.dot(l1,syn1)))) 
    l2_delta = (y - l2)*(l2*(1-l2)) 
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1)) 
    syn1 += l1.T.dot(l2_delta) 
    syn0 += X.T.dot(l1_delta) 

logistic functionが原点で0.5の値を持っていただき、ありがとうございますと

答えて

0

について。伝達関数を起点に0にする場合は、tanhを使用してください(ただし、デリバティブを変更する必要があります)。

+0

しかし、私のニューラルネットワークは、falseの場合は-1、trueの場合は1を返します。だから私はまだ間違った結果を得るだろう。 私の考え方は間違っていますか、[0,0,0]は両方の機能で何も変更されていないため、マルチレイヤーネットワークで問題を解決しますか? – fritter

+0

XORの場合、通常は証明書の結果を解釈する必要があります。例えば、ロジスティック関数では、 '> 0.5'を' 1'と解釈し、 '<= 0.5'を' 0'と解釈します。ロジスティック関数と 'tanh'関数は漸近的であり、決して' 1'を与えません。あなたは 'double'の限定された精度で関数が最終的に有効な' 0'または '1'を生成するだろうと主張することができますが、これはちょっとハッキリです。 – cantordust

+0

スクリプトは正常に動作していますか?常に<= 0.5は0を意味するので、[0,0,0]は正しいものでした。私はちょうど他の結果が0.0123か0.998だったのでちょうど混乱した。 – fritter

関連する問題