2016-08-31 49 views
1

私は、トレーニングのための次のネットワークを持っている単純なテンソルフローニューラルネットワークは、精度を上げたり、損失を減らしたりしませんか?

graph = tf.Graph() 
with graph.as_default(): 

    tf_train_dataset = tf.constant(X_train) 
    tf_train_labels = tf.constant(y_train) 
    tf_valid_dataset = tf.constant(X_test) 

    weights = tf.Variable(tf.truncated_normal([X_train.shape[1], 1])) 

    biases = tf.Variable(tf.zeros([num_labels])) 
    logits = tf.nn.softmax(tf.matmul(tf_train_dataset, weights) + biases) 

    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, tf_train_labels)) 
    optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss) 
    train_prediction = tf.nn.softmax(logits) 
    valid_prediction = tf.nn.softmax(tf.matmul(tf_valid_dataset, weights) + biases) 

と、次のように私はそれを実行した、

num_steps = 10 

with tf.Session(graph=graph) as session: 
    tf.initialize_all_variables().run() 
    print('Initialized') 
    for step in range(num_steps): 
     _, l, predictions = session.run([optimizer, loss, train_prediction]) 
     print("Loss: ",l) 
     print('Training accuracy: %.1f' % sklearn.metrics.accuracy_score(predictions.flatten(), y_train.flatten())) 

しかし

Initialized 
Loss: 0.0 
Training accuracy: 0.5 
Loss: 0.0 
Training accuracy: 0.5 

を次のようにX_trainの形状が(213403ですoutputes 、25)、y_trainは(213403、1)でログに対処します。私は2つのクラス、すなわち1または0しかないので、ラベルを1つのホットとしてエンコードしませんでした。私は2次的な損失関数でも試みましたが、それは同じで、同じことが起こりました。損失関数はすべて。私は文法上の間違いをここで感知していますが、私は無知です。

答えて

2

ラベルを1つの列として渡します(エンコードなし)。 モデルは、ラベルを因子タイプとして取得できません。 これは、ラベルを連続値と見なします。

損失:0.0は損失がゼロであることを意味します。それはあなたのモデルが完全にフィットしていることを意味します。 これは、ラベルが連続(回帰関数)で、softmax_cross_entropy_with_logitsの損失関数を使用しているために発生しています。

ラベルの1つのホットエンコードを渡して確認してください。

関連する問題