2017-05-04 7 views
-2

このコードを実行するとコスト関数がゼロになるのはなぜですか?私のコードに何が問題なのですか?なぜ私のコスト関数がゼロに等しいのですか

import tensorflow as tf 

filename_queue = tf.train.string_input_producer(["data.csv"]) 

line_reader = tf.TextLineReader(skip_header_lines=0) 
_, csv_row = line_reader.read(filename_queue) 

record_defaults = [[1],[1.0],[1.0],[1.0],[1.0]] 
out,in1,in2,in3,in4 = tf.decode_csv(csv_row, record_defaults=record_defaults) 

features = tf.stack([in1,in2,in3,in4]) 

learning_rate = 0.6 
training_epochs = 10 
batch_size = 2 
display_step = 1 
num_examples= 10 

n_hidden_1 = 10 
n_hidden_2 = 10 
n_input = 4 
n_classes = 1 

x = tf.placeholder("float", [None, n_input]) 
y = tf.placeholder("float", [n_classes]) 

def multilayer_perceptron(x, weights, biases): 
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) 
    layer_1 = tf.nn.relu(layer_1) 

    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2']) 
    layer_2 = tf.nn.relu(layer_2) 

    out_layer = tf.matmul(layer_2, weights['out']) + biases['out'] 

    return out_layer 

weights = { 
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes])) 
} 
biases = { 
    'b1': tf.Variable(tf.random_normal([n_hidden_1])), 
    'b2': tf.Variable(tf.random_normal([n_hidden_2])), 
    'out': tf.Variable(tf.random_normal([n_classes])) 
} 

prediction = multilayer_perceptron(x, weights, biases) 

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) 

init = tf.global_variables_initializer() 

with tf.Session() as sess: 
    sess.run(init) 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    for epoch in range(training_epochs): 
     avg_cost = 0 
     total_batch = int(num_examples/batch_size) 

     for i in range(total_batch): 
      batch_x = [] 
      batch_y = [] 
      for _ in range(1, batch_size): 
       example, label = sess.run([features, out]) 
       batch_x.append(example) 
       batch_y.append(label) 
       _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, 
                   y: batch_y}) 
       avg_cost += c/total_batch 

     if epoch % display_step == 0: 
      print ("Epoch:", '%04d' % (epoch+1), "cost=", \ 
          "{:.9f}".format(avg_cost)) 
    print ("Optimization Finished!") 
    coord.request_stop() 
    coord.join(threads) 

data.csvファイル:

0,0.1,0.3,0.2,0.9 
1,0.7,0.9,0.1,0.0 
2,0.6,0.9,0.4,0.4 
3,0.9,0.3,0.6,0.4 
4,0.5,0.3,0.5,0.5 
5,0.5,0.6,0.1,0.4 
6,0.0,0.4,0.6,0.6 
7,0.0,0.9,0.4,0.5 
8,0.6,0.4,0.2,0.5 
9,0.7,0.1,0.1,0.9 

結果:

エポック:0001コスト= 0.000000000エポック:0002コスト= 0.000000000エポック: 0003コスト= 0.000000000エポック:0004コスト= 0.000000000エポック:0005コスト=エポック:0006コスト= 0.000000000エポック:0007コスト= 0.000000000エポック:0008コスト= 0.000000000エポック:0009コスト= 0.000000000エポック:0010コスト= 0.000000000最適化完了!

答えて

1

セッションから返されるcの値は、実際にはゼロに等しくなります。

_, c = sess.run([optimizer, cost], feed_dict={x: batch_x, 
               y: batch_y}) 

テンソルが正しく実行されていますか?

+0

なぜですか? feed_dictとオプティマイザの実行後、cの値はコスト関数の計算された出力の値と等しいことが必要です。ではない? – netizen

関連する問題