[Python] Tensorflow: Convert Tensor to numpy array then pass into a feed_dict

Discussão em 'Python' iniciado por Stack, Agosto 28, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to build a softmax regression model for CIFAR classification. At first when I tried to pass in my images and labels into the feed dictionary, I got an error that said that feed dictionaries do not accept Tensors. I then converted them into numpy arrays using .eval() but the program hangs at the .eval() line and does not continue any further. How can I pass this data into the feed_dict?

    CIFARIMAGELOADING.PY


    import tensorflow as tf
    import os
    import tensorflow.models.image.cifar10 as cf


    IMAGE_SIZE = 24
    BATCH_SIZE = 128


    def loadimagesandlabels(size):
    # Load the images from the CIFAR data directory
    FLAGS = tf.app.flags.FLAGS
    data_dir = os.path.join(FLAGS.data_dir, 'cifar-10-batches-bin')
    filenames = [os.path.join(data_dir, 'data_batch_%d.bin' % i) for i in xrange(1, 6)]
    filename_queue = tf.train.string_input_producer(filenames)
    read_input = cf.cifar10_input.read_cifar10(filename_queue)

    # Reshape and crop the image
    height = IMAGE_SIZE
    width = IMAGE_SIZE
    reshaped_image = tf.cast(read_input.uint8image, tf.float32)
    cropped_image = tf.random_crop(reshaped_image, [height, width, 3])

    # Generate a batch of images and labels by building up a queue of examples
    print('Filling queue with CIFAR images')
    num_preprocess_threads = 16
    min_fraction_of_examples_in_queue = 0.4
    min_queue_examples = int(BATCH_SIZE*min_fraction_of_examples_in_queue)

    images, label_batch = tf.train.batch([cropped_image,read_input.label],batch_size=BATCH_SIZE, num_threads=num_preprocess_threads, capacity=min_queue_examples+3*BATCH_SIZE)
    print(images)
    print(label_batch)
    return images, tf.reshape(label_batch, [BATCH_SIZE])

    CIFAR.PY


    #Set up placeholder vectors for image and labels
    x = tf.placeholder(tf.float32, shape = [None, 1728])
    y_ = tf.placeholder(tf.float32, shape = [None,10])
    W = tf.Variable(tf.zeros([1728,10]))
    b = tf.Variable(tf.zeros([10]))


    #Implement regression model. Multiply input images x by weight matrix W, add the bias b
    #Compute the softmax probabilities that are assigned to each class
    y = tf.nn.softmax(tf.matmul(x,W) + b)

    #Define cross entropy
    #tf.reduce sum sums across all classes and tf.reduce_mean takes the average over these sums
    cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y), reduction_indices = [1]))

    #Train the model
    #Each training iteration we load 128 training examples. We then run the train_step operation
    #using feed_dict to replace the placeholder tensors x and y_ with the training examples
    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

    #Open up a Session
    init = tf.initialize_all_variables()
    sess = tf.Session()
    sess.run(init)
    for i in range(1000) :
    images, labels = CIFARImageLoading.loadimagesandlabels(size=BATCH_SIZE)
    unrolled_images = tf.reshape(images, (1728, BATCH_SIZE))

    #convert labels to their one_hot representations
    # should produce [[1,0,0,...],[0,1,0...],...]
    one_hot_labels = tf.one_hot(indices= labels, depth=NUM_CLASSES, on_value=1.0, off_value= 0.0, axis=-1)

    print(unrolled_images)
    print(one_hot_labels)
    images_numpy, labels_numpy = unrolled_images.eval(session=sess), one_hot_labels.eval(session=sess)
    sess.run(train_step, feed_dict = {x: images_numpy, y_:labels_numpy})




    #Evaluate the model
    #.equal returns a tensor of booleans, we want to cast these as floats and then take their mean
    #to get percent correctness (accuracy)
    print("evaluating")
    test_images, test_labels = CIFARImageLoading.loadimagesandlabels(TEST_SIZE)
    test_images_unrolled = tf.reshape(test_images, (1728, TEST_SIZE))
    test_images_one_hot = tf.one_hot(indices= test_labels, depth=NUM_CLASSES, on_value=1.0, off_value= 0.0, axis=-1)
    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print(accuracy.eval(feed_dict = {x: unrolled_images.eval(), y_ : test_images_one_hot.eval()}))

    Continue reading...

Compartilhe esta Página