web-dev-qa-db-fra.com

Vous devez saisir une valeur pour le tenseur d'espace réservé 'Placeholder' avec le type float

Je suis un nouveau venu dans tensorflow, je ne sais vraiment pas comment résoudre le problème.

Le code est comme:

  1. Nourrissez le train avec des valeurs:

    sess.run(train_op, feed_dict={images: e, labels: l, keep_prob_fc2: 0.5})
    
  2. Utilisez la valeur en CNN:

    x = tf.placeholder(tf.float32, [None, 10 * 1024])
    

Alors avoir l'erreur

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype float
     [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/gpu:0"]()]]

J'imprime les types de valeur en entrée à l'aide de print(e.dtype) et le résultat est float32 Et e.shape:(10, 32, 32, 1).

Je ne sais vraiment pas pourquoi cette erreur se produit.


Le format du code

Première:

 define the CNN model 
       "image = tf.placeholder(tf.float32, [FLAGS.batch_size, 32,32,1])" is here

Seconde:

 loss funtion and train_op is here
       "label = tf.placeholder(tf.float32, [None, FLAGS.batch_size])" is here

Troisième est la session:

images, labels = getShuffleimage()#here will get shuffle data
num_examples = 0
init = tf.initialize_local_variables()

with tf.Session() as sess:
    # Start populating the filename queue.
    sess.run(init)
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord, sess=sess)

    try:
        step = 0
        while not coord.should_stop():
            start_time = time.time()
            image, label = sess.run([images, labels])#get shuffle images
            print(image.shape)
            print(image.dtype)
            sess.run(train_op, feed_dict={image: image, label: label , keep_prob_fc2: 0.5})
            duration = time.time() - start_time

    except tf.errors.OutOfRangeError:
        print('Done training after reading all data')
    finally:
        # When done, ask the threads to stop.
        coord.request_stop()

        # Wait for threads to finish.
        coord.join(threads)
        sess.close()
22
judyzha

Quelques questions

première
pourquoi vous utilisez sess = tf.InteractiveSession() et with tf.Session() as sess: en même temps, simplement curieux

deuxièmement, quel est votre nom de marque de réservation x ou images?
si le nom est x, {images: x_data...} ne nourrit pas x_data à x, il écrase (?) images
Je pense que feed_dict devrait être {x: x_data...}

si name est images, avez-vous deux images dans votre programme, placeholder et shuffle data, essayez de modifier le nom de la variable

13
xxi

J'ai vu un problème avec le code. Il existe deux variables portant le même nom label. L'un d'eux fait référence à un tenseur et l'autre à des données. Lorsque vous définissez label: label dans le feed_dict, vous devez faire la distinction entre les deux variables. Peut-être que vous pouvez essayer de changer le nom d'une des variables?

1
Targo