2

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

...\000881.JPG  2
...\000961.JPG  1
...\001700.JPG  1
...\001291.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 是以一种热格式编码的标签。我需要第二种格式的文件才能获得行号和标签。第二个文件与 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()

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

是否有可能只用一个输入文件就可以做到这一点?处理多种文件和格式有点麻烦。

4

1 回答 1

0

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

于 2017-01-12T19:48:06.117 回答