2017-03-15 12 views
1

を意味するように収束します。トレーニングデータには、出力に対して約69%のゼロがあります。入力フィーチャは実数であり、平均を差し引いて標準偏差で割ることによって正規化しました。私は関係なく、私が試したどのような技術、ネットワークを実行していないたびに、私はモデル> 69%が正確に得ることができない、と私YHATがすべてゼロに収束されるように見えます。Tensorflowは、私がtensorflowを使用してバイナリ出力を予測しようとしています

私は別のオプティマイザ、損失関数、バッチサイズなどのような多くのことを試してみた..しかし、関係なく、私は何をすべきか、それは69%に収束し、決してオーバー行きます。私は私がやっていると、よりfundemental問題があります推測しているが、私はそれを見つけるように見えることはできません。ここで

はあなたが一定のドロップアウトを使用している私のコード

X = tf.placeholder(tf.float32,shape=[None,14],name='X') 
    Y = tf.placeholder(tf.float32,shape=[None,1],name='Y') 

    W1 = tf.Variable(tf.truncated_normal(shape=[14,20],stddev=0.5)) 
    b1 = tf.Variable(tf.zeros([20])) 
    l1 = tf.nn.relu(tf.matmul(X,W1) + b1) 

    l1 = tf.nn.dropout(l1,0.5) 

    W2 = tf.Variable(tf.truncated_normal(shape=[20,20],stddev=0.5)) 
    b2 = tf.Variable(tf.zeros([20])) 
    l2 = tf.nn.relu(tf.matmul(l1,W2) + b2) 

    l2 = tf.nn.dropout(l2,0.5) 

    W3 = tf.Variable(tf.truncated_normal(shape=[20,15],stddev=0.5)) 
    b3 = tf.Variable(tf.zeros([15])) 
    l3 = tf.nn.relu(tf.matmul(l2,W3) + b3) 

    l3 = tf.nn.dropout(l3,0.5) 

    W5 = tf.Variable(tf.truncated_normal(shape=[15,1],stddev=0.5)) 
    b5 = tf.Variable(tf.zeros([1])) 
    Yhat = tf.matmul(l3,W5) + b5 

    loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=Yhat, labels=Y)) 

    learning_rate = 0.005 
    l2_weight = 0.001 
    learner = tf.train.AdamOptimizer(learning_rate).minimize(loss) 

    correct_prediction = tf.equal(tf.greater(Y,0.5), tf.greater(Yhat,0.5)) 
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 

答えて

0

の最新バージョンです。

l3 = tf.nn.dropout(l3,0.5) 

ドロップアウトは、トレーニング中にのみ使用し、精度や予測中はチェックしないでください。

keep_prob = tf.placeholder(tf.float32) 
l3 = tf.nn.dropout(l3,keep_prob) 

プレースホルダには、トレーニング中に適切な値を与え、テスト/予測中に1を与える必要があります。

あなたはすべての層でドロップアウトを持って、私はあなたが必要な場合はわからない、小さなネットワークのための多くのドロップアウト。これは

+0

感謝。それは問題を解決しませんでしたが、私はこのハトルを過ぎると、それが助けになると確信しています。 – Iinferno1

0

あなたcorrect_prediction

correct_prediction = tf.equal(tf.greater(Y,0.5), tf.greater(Yhat,0.5)) 

を計算する場合YhatはまだあなたがY_pred使用してシグモイドを計算し、あなたのcorrect_prediction

Y_pred = tf.nn.sigmoid(Yhat) 
    correct_prediction = tf.equal(tf.greater(Y,0.5), tf.greater(Y_pred,0.5)) 
を計算するために Y_predを使うことになっている、logitsているようですがお役に立てば幸いですアドバイスを
関連する問題