2

テンソルフローを使用してバイナリ出力を予測しようとしています。トレーニング データには、出力の約 69% のゼロがあります。入力フィーチャは実数値であり、平均を引いて標準偏差で割ることで正規化しました。ネットワークを実行するたびに、試した手法に関係なく、69% を超える精度のモデルを取得できず、Yhat がすべてゼロに収束しているように見えます。

さまざまなオプティマイザ、損失関数、バッチ サイズなど、多くのことを試しましたが、何をしても 69% に収束し、それを超えることはありません。私がやっていることにはもっと根本的な問題があると思いますが、それを見つけることができないようです.

ここに私のコードの最新バージョンがあります

    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))
4

2 に答える 2