将图像数据、行id和标签合并到一个输入文件中



我有以下格式的训练/测试输入文件(文件名标签):

...00881.JPG  2
...00961.JPG  1
...01700.JPG  1
...01291.JPG  1

上面的输入文件将与ImageDeserializer一起使用。由于在训练模型后,我无法从代码中检索行ID和标签,所以我创建了第二个格式的测试文件:

|index 881 |piece_type 0 0 1 0 0 0
|index 961 |piece_type 0 1 0 0 0 0
|index 1700 |piece_type 0 1 0 0 0 0
|index 1291 |piece_type 0 1 0 0 0 0

第二文件的格式与第一文件中表示的信息相同,但格式不同。索引是行号和!piece_type是以one-hot格式编码的标签。我需要第二种格式的文件,以便能够获得行号和标签。第二个文件与CTFDeserializer一起用于创建一个复合读取器,如下所示:

image_source = ImageDeserializer(map_file, StreamDefs(
features = StreamDef(field='image', transforms=transforms), # first column in map file is referred to as 'image'
labels   = StreamDef(field='label', shape=num_classes)      # and second as 'label'
))
text_source = CTFDeserializer("test_map2.txt")
text_source.map_input('index', dim=1, format="dense")
text_source.map_input('piece_type', dim=6, format="dense")
# define a composite reader
reader_config = ReaderConfig([image_source, text_source])
minibatch_source = reader_config.minibatch_source()

我添加第二个文件的原因是能够创建一个混淆矩阵,然后我需要能够同时拥有我测试的给定迷你批次的真实标签和预测标签。为了获得输入图像的指针包,行号很好。

以某种方式,只需一个输入文件就可以做到这一点吗?处理多种文件和格式有点麻烦。

您可以在不使用阅读器的情况下加载测试图像,如本wiki页面中所述。诚然,这给用户带来了所有转换(裁剪/均值减法等)的负担,但至少PIL包让这些转换变得容易。本CNTK教程使用PIL在将输入图像输入CNTK之前对其进行裁剪和缩放。

相关内容

最新更新