图像张量与文件名和标签不匹配

时间:2017-03-20 13:31:16

标签: python machine-learning tensorflow

GC.Collect()

fileReader类的相关代码。

training_set_name, training_set_class, training_set_image = sess.run([fR.training_set_name, fR.training_set_class, fR.training_set_image])

labelFileBatchProcessor读取csv,shuffle,并返回包含名称和标签的批处理。 def return_training_set(): image_tra_name_batch, image_tra_class_batch = labelFileBatchProcessor(50, 1, "training") files_training = filenameLister2(image_tra_name_batch) images = build_images(files_training) return image_tra_name_batch, image_tra_class_batch, images training_set_name, training_set_class, training_set_image = return_training_set() 将这些名称转换为路径,它返回一个队列。此队列将传递给Filenamelister()函数,该函数将返回图像张量。

问题是加载的图像张量与imageloader()不匹配。我认为问题是当image_tra_name_batch被执行时,会加载另一个浴缸。有没有解决这个问题?

我想避免将所有内容存储在一个文件中,而是希望从csv中读取图像名称,然后将其随机播放,然后再将图像随机播放。

Edit1:一些相关的功能

labelFileBatchProcessor函数:

build_images(files_training)

filenameLister2功能:

 def labelFileBatchProcessor(batch_size, num_epochs=None, what_set="training"):
        if what_set == "training":
            inputCsv = ["./data/BDRW_train/BDRW_train_1/labels.csv"]
        elif what_set == "validation":
            inputCsv = ["./data/BDRW_train/BDRW_train_2/labels.csv"]
        labelFile_queue = tf.train.string_input_producer(inputCsv, num_epochs=1, shuffle=False)
        image_name, image_class = labelFileInit(labelFile_queue)
        min_after_dequeue = 50
        capacity = min_after_dequeue + 3 * batch_size
        image_name_batch, image_class_batch = tf.train.shuffle_batch(
            [image_name, image_class], batch_size=batch_size, capacity=capacity,
            min_after_dequeue=min_after_dequeue)
        return image_name_batch, image_class_batch

build_images功能:

def filenameLister2(imageNameBatch):
    FILES_TRAINING = TRAINING_DIR + imageNameBatch + ".jpg"
    FILES_TRAINING = tf.train.string_input_producer(FILES_TRAINING, name="CSVFilenames")
    return FILES_TRAINING

EDIT2

我更新了def build_images(files_training): image_reader = tf.WholeFileReader() _, image_file = image_reader.read(files_training) image_orig = tf.image.decode_jpeg(image_file) image = tf.image.resize_images(image_orig, [48, 48]) image.set_shape((48, 48, 3)) num_preprocess_threads = 1 min_queue_examples = 256 images = tf.train.batch([image], batch_size=BATCH_SIZE, num_threads=NUM_PREPROCESS_THREADS, capacity=BATCH_SIZE) return images 功能,并从labelFileBatchProcessor()中删除了tf.train_batch()。这可能是由不同的问题引起的。我把张量放在同一批次中,图像仍然不匹配。

build_images()

1 个答案:

答案 0 :(得分:0)

据我所知,问题出现了,因为输入管道中有两个独立的批处理阶段:

结果,每个文件名和类之间的关联以及每个图像都丢失了。对此类问题的一般解决方案是确保将训练示例的所有属性(在本例中为image_nameimage_classimage)传递给相同的{{1 }(或tf.train.batch())调用。这将确保它们被预处理为不可分割的张量元组,并且将保持关联。