2016-07-07 11 views
5

के लिए एक मान फ़ीड करना होगा मेरे पास एक बग है जिसे मैं कारण नहीं ढूंढ सकता। यहाँ कोड है:टेन्सफोर्लो: फीड डॉक त्रुटि: आपको प्लेसहोल्डर टेंसर

with tf.Graph().as_default(): 
     global_step = tf.Variable(0, trainable=False) 

     images = tf.placeholder(tf.float32, shape = [FLAGS.batch_size,33,33,1]) 
     labels = tf.placeholder(tf.float32, shape = [FLAGS.batch_size,21,21,1]) 

     logits = inference(images) 
     losses = loss(logits, labels) 
     train_op = train(losses, global_step) 
     saver = tf.train.Saver(tf.all_variables()) 
     summary_op = tf.merge_all_summaries() 
     init = tf.initialize_all_variables() 

     sess = tf.Session() 
     sess.run(init)             

     summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph) 

     for step in xrange(FLAGS.max_steps): 
      start_time = time.time() 

      data_batch, label_batch = SRCNN_inputs.next_batch(np_data, np_label, 
                   FLAGS.batch_size) 


      _, loss_value = sess.run([train_op, losses], feed_dict={images: data_batch, labels: label_batch}) 

      duration = time.time() - start_time 

def next_batch(np_data, np_label, batchsize, 
       training_number = NUM_EXAMPLES_PER_EPOCH_TRAIN): 

    perm = np.arange(training_number) 
    np.random.shuffle(perm) 
    data = np_data[perm] 
    label = np_label[perm] 
    data_batch = data[0:batchsize,:] 
    label_batch = label[0:batchsize,:] 


return data_batch, label_batch 

जहां np_data पूरे प्रशिक्षण HDF5 फ़ाइल से पढ़ने के नमूने, और np_label करने में ही है।

2016-07-07 11:16:36.900831: step 0, loss = 55.22 (218.9 examples/sec; 0.585 sec/batch) 
Traceback (most recent call last): 

    File "<ipython-input-1-19672e1f8f12>", line 1, in <module> 
    runfile('/home/kang/Documents/work_code_PC1/tf_SRCNN/SRCNN_train.py', wdir='/home/kang/Documents/work_code_PC1/tf_SRCNN') 

    File "/usr/lib/python3/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile 
    execfile(filename, namespace) 

    File "/usr/lib/python3/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 85, in execfile 
    exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace) 

    File "/home/kang/Documents/work_code_PC1/tf_SRCNN/SRCNN_train.py", line 155, in <module> 
    train_test() 

    File "/home/kang/Documents/work_code_PC1/tf_SRCNN/SRCNN_train.py", line 146, in train_test 
    summary_str = sess.run(summary_op) 

    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 372, in run 
    run_metadata_ptr) 

    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 636, in _run 
    feed_dict_string, options, run_metadata) 

    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 708, in _do_run 
    target_list, options, run_metadata) 

    File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 728, in _do_call 
    raise type(e)(node_def, op, message) 

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [128,33,33,1] 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[128,33,33,1], _device="/job:localhost/replica:0/task:0/gpu:0"]()]] 
    [[Node: truediv/_74 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_56_truediv", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 
Caused by op 'Placeholder', defined at: 

तो, यह दर्शाता है कि कदम 0 के लिए यह परिणाम है, जिसका अर्थ है कि डेटा प्लेसहोल्डर में खिलाया कर दिया गया है

बाद मैं कोड चलाने के लिए, मैं इस तरह त्रुटि मिली।

लेकिन अगली बार प्लेसहोल्डर में डेटा को खिलाने में त्रुटि क्यों आती है?

जब मैं कोड summary_op = tf.merge_all_summaries() पर टिप्पणी करने का प्रयास करता हूं और कोड ठीक काम करता है। यह मामला क्यों है?

उत्तर

9

When I try to comment the code summary_op = tf.merge_all_summaries() and the code works fine. why is it the case?

summary_op एक ऑपरेशन है। यदि मौजूद है (और यह आपके मामले में सच है) किसी अन्य ऑपरेशन के परिणाम से संबंधित सारांश ऑपरेशन जो प्लेसहोल्डर्स के मानों पर निर्भर करता है, तो आपको ग्राफ को आवश्यक मानों को फ़ीड करना होगा।

तो, आपकी लाइन summary_str = sess.run(summary_op) को स्टोर करने के लिए मूल्यों के शब्दकोश की आवश्यकता है।

आमतौर पर, मानों को लॉग करने के लिए संचालन को फिर से निष्पादित करने के बजाय, आप परिचालन और एक बार सारांश_ऑप चलाते हैं।

तरह

if step % LOGGING_TIME_STEP == 0: 
    _, loss_value, summary_str = sess.run([train_op, losses, summary_op], feed_dict={images: data_batch, labels: label_batch}) 
else: 
    _, loss_value = sess.run([train_op, losses], feed_dict={images: data_batch, labels: label_batch}) 
+1

कुछ बहुत बहुत धन्यवाद करते हैं। यह काम करता हैं। –

+0

मुझे यह सामान्य रूप से उपयोगी लगता है कि मैं ग्राफ़ पर अलग-अलग ऑप्स कैसे चला सकता हूं, जहां उचित हो (लॉगिंग या सारांश) डेटा प्राप्त हो। एक बार जब आप "प्राप्त" करते हैं तो चीजें कैसे की जाती हैं, यह टीएफ की लचीलापन दर्शाती है। चीयर्स! –

+0

आपका स्वागत है! – nessuno

संबंधित मुद्दे