我只想加载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文件中时,如何在测试时从自定义数据集中读取单个特定图像?
答案 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