2017-08-01 12 views
1

15000から25000までの値の一覧があります。私はそれらを2つのカテゴリーに分けなければなりません。つまり、(約)20000がカテゴリー1に、残りがカテゴリー2になります。私は、シグモイド活性化がこのために働くはずであることを理解しました。私はそのためkerasで以下の層を使用しています:ケラスのシグモイド層

モデル=シーケンシャル()

model.add(Dense(1 , input_dim =1)) 
model.add(Activation('sigmoid')) 
model.add(Dense(2 , init='normal' , activation = 'softmax')) 
model.compile(loss='mean_absolute_error', optimizer='rmsprop') 
model.fit(X_train, y_train, validation_data=(X_test, y_test),epochs=10,batch_size=200,verbose=2) 

をしかし、私は私のサンプルケースのためのモデルを実行したときにどのようにすることができ、すべての値がカテゴリ2に終わりますこれを改善する?

+0

モデルを訓練しましたか? –

+0

コード全体を投稿すると役に立ちます。 –

+0

は 'model.complie()'、 'model.fit()'、XとYの値のデータのサンプルを見る必要があります – DJK

答えて

1

値のリストが15000〜25000の範囲にある場合、シグモイドはすべての値に対して1.0に近い値を与えます。そのような非常に大きな値が迅速かつ汚いテストアプローチ1を漸近的にしようとしているので、0と1の間に収まるようにシグモイドカボチャのすべてがこれを示しています

>>> import math 
>>> def s(x): 
...  return 1.0/(1.0+math.exp(-x)) 
... 
>>> s(15000) 
1.0 
>>> s(25000) 
1.0 

どちらかあなたが知っているので、難しいことではありません値は、正規化範囲を指定するか、別のアクティベーション機能を使用します。

質問は、20000が1つのカテゴリに残り、残りが残りのものになると言いますと、あいまいです。したがって、15000〜25000の値を持つことを意味する場合(値の値)に分類する必要があること、そして用事

0

LucidMonkeyさんのコメントも勾配降下を実行した後、すべての例がカテゴリーである理由を、説明していない2

の問題は、非常に大規模な大きさの数値のため(のようなあなたのもの)、シグモイドの導関数は事実上ゼロです。

勾配降下では、モデル内の微分係数のサイズによって支配されるサイズのグローバル最小値に向かってステップを踏みます。デリバティブがゼロの場合、ステップもゼロになり、モデルがスタックされます。したがって、勾配降下を実行した後でも、すべての例でシグモイド関数が〜1に評価される領域にとどまります。

シグモイドレイヤーがシグモイドの派生物がゼロでない範囲に入力を入れて、グラデーションディセントアルゴリズムが実際に最適化できるようにするには、データを正規化して1と分散0を平均化します。

関連する問題