TensorFlow TFRecords 读取一张特定图像

TensorFlow TFRecords read one specific image

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

├── 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 二进制文件)。

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

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

第一个问题。 您需要一个管道来解析 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,有关详细信息,请参阅