2017-01-11 5 views
1

ニューラルネットワークにXOR論理関数を教えようとしています。私は既に、双曲線正接とReLUを活性化関数として使用して、ネットワークを訓練しました(ReLUに関して、それはこの種の問題には適していませんが、それでもテストしたいと思っています)。それでも、logistic functionで動作させることはできません。機能の私の定義は次のとおりです。ロジスティック関数の誤分類

def logistic(data): 
    return 1.0/(1.0 + np.exp(-data)) 

及びその誘導体:npnumpyのインポートされたパッケージに与えられた名称である

def logistic_prime(data): 
    output = logistic(data) 
    return output * (1.0 - output) 

。 XORロジックの使用は0と1であるため、ロジスティック関数は適切なアクティベーション関数でなければなりません。それでも、私が得られる結果はすべての場合において0.5に近く、つまり0と1の入力の組み合わせが0.5に近い値になる。私が言っていることに何か誤りはありますか?

私は、より多くの文脈やより多くのコードを求めていることに躊躇しないでください。前もって感謝します。

+2

'logistic(data)'の出力を 'logistic_prime'のローカル変数に代入し、実際に関数を2回呼び出すのではなく、2回使用することができます。それはあなたの問題とは関係ありませんが、少なくともトレーニングはより早く失敗するでしょう。 – jez

答えて

1

私はあなたと同じ問題がありました。 問題は、データを線形超平面で分割できない場合に発生します。 データを訓練するために試してみてください。

X = [[-1,0],[0,1],[1,0],[0,-1]] 
Y = [1,0,1,0] 

あなたは座標上でこれをドローダウンした場合は、それが直線的に分割可能ではありません罰金します。 ロジスティックに訓練すると、パラメータはすべて0に近く、結果は0.5に近くなります。

もう1つの線形に分割可能な例は、用途Y = [1,1,0,0] とロジスティック作業です。

関連する問題