TensorFlow TFRecords读取一个特定图像

时间:2017-03-11 08:30:21

标签: python tensorflow dataset protocol-buffers

我只想加载TFRecords文件中的一个图像,该文件是我用build_image_data.py创建的,目录结构为:

├── train
|   ├── chef
|       ├── data0.png
|       ├── ...
|       └── data5467.png
|   ├── chicken
|       ├── data0.png
|       ├── ...
|       └── data2098.png
|   ├── parasaurolophus
|       ├── data0.png
|       ├── ...
|       └── data2977.png
|   └── Trex
|       ├── data0.png
|       ├── ...
|       └── data2841.png
├── validation
|   ├── ...
├── build_image_data.py
└── labels.txt

导致单个文件:train-00000-of-00001包含上面的所有图像(124MB Binary)。

现在我想要读取TFRecords文件中的第一张图片,该文件应该是train/chef/data0.png。我该怎么做?

当所有图像都存储在同一TFRecords文件中时,如何在测试时从自定义数据集中读取单个特定图像?

1 个答案:

答案 0 :(得分:0)

第一个问题。 你需要一个管道来解析tfrecords文件,它应该是这样的:

reader = tf.TFRecordReader()
queue = tf.train.string_input_producer([you_tfrecords_file_name])
_, serialized = reader.read(queue)
features = tf.parse_single_example(serialied, features={you_features_dict})
image = features[your_image_name]
image.set_shape(you_image_shape)

在此之后,您可以使用

将图像作为np.ndarray类型运行
sess.run(image)

每次调用此行代码时,一个图像将按照它们写入tfrecords文件的顺序出列

第二个问题,当你将所有图像转换成tfrecords时,很难用队列作为输入进行变形,我建议你将训练图像转换为train.tfrecords并将有效图像转换为valid.tfrecords并使用共享变量为这两个输入获得两个logits,详细信息请参阅this