2017-07-19 8 views
0

ですこれは、この記事(ない鉱山)に続くもの:TensorFlow for binary classificationtensorflow-用-onehot分類は、コストは常に0

私は同様の問題を持っていたし、1つのホットエンコーディングを使用するように私のデータを変換します。しかし、私はまだ0のコストを得ています。面白いことに、練習データをフィードに戻すと、正確には正しいです(90%)。以下

コード:

# Set parameters 
learning_rate = 0.02 
training_iteration = 2 
batch_size = int(np.size(y_vals)/300) 
display_step = 1 
numOfFeatures = 20 # 784 if MNIST 
numOfClasses = 2 #10 if MNIST dataset 

# TF graph input 
x = tf.placeholder("float", [None, numOfFeatures]) 
y = tf.placeholder("float", [None, numOfClasses]) 

# Create a model 

# Set model weights to random numbers: https://www.tensorflow.org/api_docs/python/tf/random_normal 
W = tf.Variable(tf.random_normal(shape=[numOfFeatures,1])) # Weight vector 
b = tf.Variable(tf.random_normal(shape=[1,1]))    # Constant 

# Construct a linear model 
model = tf.nn.softmax(tf.matmul(x, W) + b) # Softmax 

# Minimize error using cross entropy 
# Cross entropy 
cost_function = -tf.reduce_sum(y*tf.log(model)) 
# Gradient Descent 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost_function) 

# Initializing the variables 
init = tf.global_variables_initializer() 

# Launch the graph 
with tf.Session() as sess: 
    sess.run(init) 

    # Training cycle 
    for iteration in range(training_iteration): 
     avg_cost = 0. 

     total_batch = int(len(x_vals)/batch_size) 
     # Loop over all batches 
     for i in range(total_batch): 

      batch_xs = x_vals[i*batch_size:(i*batch_size)+batch_size] 
      batch_ys = y_vals_onehot[i*batch_size:(i*batch_size)+batch_size] 

      # Fit training using batch data 
      sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys}) 

      # Compute average loss 
      avg_cost += sess.run(cost_function, feed_dict={x: batch_xs, y: batch_ys})/total_batch 

     # Display logs per eiteration step 
     if iteration % display_step == 0: 
      print ("Iteration:", '%04d' % (iteration + 1), "cost=", "{:.9f}".format(avg_cost)) 

    print ("Tuning completed!") 

    # Evaluation function 
    correct_prediction = tf.equal(tf.argmax(model, 1), tf.argmax(y, 1)) 
    #correct_prediction = tf.equal(model, y) 
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 

    # Test the model 
    print ("Accuracy:", accuracy.eval({x: x_vals_test, y: y_vals_test_onehot})) 
+0

あなたcost_function、BATCH_SIZEとtotal_batchは何ですか? – Himaprasoon

+0

コスト関数は上に示しています。 Batch_sizeは3123です。合計バッチは300です。 – user1761806

答えて

0

費用のためのあなたの出力を使用している:

"{:.9f}".format(avg_cost)

をので、多分あなたはより大きな数で9を置き換えることができます。

0

ここで私は最後に見つけたものです。

は交換してください:

b = tf.Variable(tf.random_normal(shape=[1,1])) 

で:

b = tf.Variable(tf.zeros([1])) 
関連する問題