我以这种格式训练/测试输入文件(文件名标签):
...\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()
我添加第二个文件的原因是能够创建一个混淆矩阵,然后我需要能够同时拥有我测试的给定小批量的真实标签和预测标签。为了获得输入图像的指针包,行号很好。
是否有可能以某种方式仅使用一个输入文件来执行此操作?处理多种文件和格式有点麻烦。
答案 0 :(得分:0)
您可以在不使用阅读器的情况下加载测试图像,如this wiki page中所述。不可否认,这将所有变换(裁剪/平均减法等)的负担给用户,但至少PIL包使这些变得容易。此CNTK tutorial使用PIL裁剪和缩放输入图像,然后再将其输入CNTK。