tf.train.batch形状与自定义的np.array数据不匹配

时间:2017-09-24 11:57:34

标签: python tensorflow tensorflow-gpu

我正在使用slim库来训练我自己的resnet_v2_152和

构建我自己的图像numpy数组数据,堆叠有20个图像。

这意味着我的numpy数组大小将是

[224, 224, 20]

通过使用字节转换将数据转换为tfrecords并在预处理后获取图像数组数据时我没有问题,但它总是显示错误

INFO:tensorflow:Error reported to Coordinator: 
<class 'tensorflow.python.framework.errors_impl.InvalidArgumentError'>, 
Shape mismatch in tuple component 0. Expected [224,224,3], got [224,224,20] 

OutOfRangeError (see above for traceback): FIFOQueue '_5_batch/fifo_queue' 
is closed and has insufficient elements (requested 1, current size 0)

当我申请tf.train.batch

以下是我的代码部分

    dataset = dataset_factory.get_dataset(
        FLAGS.datasetname, FLAGS.dataset, FLAGS.dataset_dir)

    network_fn = nets_factory.get_network_fn(
        FLAGS.model_name,
        num_classes=101,
        is_training=True)

    provider = slim.dataset_data_provider.DatasetDataProvider(
          dataset,
          num_readers=4,
          common_queue_capacity=20 * FLAGS.batch_size,
          common_queue_min=10 * FLAGS.batch_size)
    [image, label] = provider.get(['image', 'label'])
    label -= 0

    preprocessing_name = FLAGS.preprocessing_name or FLAGS.model_name
    image_preprocessing_fn = preprocessing_factory.get_preprocessing(preprocessing_name, is_training=True)

    eval_image_size = FLAGS.eval_image_size or network_fn.default_image_size
    image = image_preprocessing_fn(image, eval_image_size, eval_image_size)

    #Batch size is 1
    images, labels = tf.train.batch(
          [image, label],
          batch_size=FLAGS.batch_size,
          num_threads=4,
          capacity=5 * FLAGS.batch_size)   

    init_op = tf.group(tf.global_variables_initializer(),
            tf.local_variables_initializer())

    #This part to see the fetched results
    with tf.Session() as sess:
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)
        sess.run(init_op)
        im = sess.run(images)
        l = sess.run(label)
        coord.request_stop()
        coord.join(threads)

我坚持要遵循train_image_classifier.py中的风格,因为我想使用超薄库提供的默认训练模式。

我将非常感谢您的帮助和解答。感谢

1 个答案:

答案 0 :(得分:0)

我刚刚经历过自己的经历,并发现错误是由于尺寸预处理图像尺寸

通过更改

中的代码
vgg_preprocessing.py

image.set_shape([output_height, output_width, 3])

image.set_shape([output_height, output_width, channels])

然而,我想知道改变这个有什么影响,如果有人能回答我,那么我真的很感激。感谢