【问题标题】:MXNet ImageRecordIter test data / label formatMXNet ImageRecordIter 测试数据/标签格式
【发布时间】:2017-08-04 03:36:08
【问题描述】:

我无法理解 MXNet ImageRecordIter 的工作原理。 Here 是我一直在使用的参考

首先, --test-ratio 标志实际上是做什么的?生成 lst 文件时,我分不清哪几行是测试数据。

我遇到的另一个更大的问题是标签的格式。如果我们有 N 个类,一个标准的神经网络输出可能是一个具有 N 维的 softmax 向量。在这种情况下,正常标签将是一个 1 热编码,其维度为 1,映射到我们的类。但是 ImageRecordIter 似乎它的标签格式只是一个数字?是不是有一些幕后魔术发生了?

【问题讨论】:

    标签: machine-learning deep-learning data-science mxnet


    【解决方案1】:

    让我们首先从--train-ratio--test-ratio 开始。这两个键仅用于将所有图像拆分到测试组和训练组。 Here is 在处理这些标志的代码中的精确位置。让我从那里复制粘贴逻辑:

        if args.train_ratio == 1.0:
            write_list(args.prefix + str_chunk + '.lst', chunk)
        else:
            if args.test_ratio:
                write_list(args.prefix + str_chunk + '_test.lst', chunk[:sep_test])
            if args.train_ratio + args.test_ratio < 1.0:
                write_list(args.prefix + str_chunk + '_val.lst', chunk[sep_test + sep:])
            write_list(args.prefix + str_chunk + '_train.lst', chunk[sep_test:sep_test + sep])
    

    可以看出,如果 --train-ratio 设置为 1.0,它会完全忽略任何测试比率,只是转储文件中的所有图像(在我们的例子中为 caltech.lst)。这是造成混淆的主要原因,因为这是填充 --train-ratio 的默认值的方式:

    cgroup.add_argument('--train-ratio', type=float, default=1.0,
                        help='Ratio of images to use for training.')
    

    默认设置为1.0。因此,如果未设置 --train-ratio,则设置为 --test-ratio 的内容无关紧要。牢记这一点,让我们看看来自article 的命令:

    os.system('python %s/tools/im2rec.py --list=1 --recursive=1 --shuffle=1 --test-ratio=0.2 data/caltech data/101_ObjectCategories'%os.environ['MXNET_HOME'])
    

    这里的命令只包含--test-ratio,因此它不会像文章声称的那样生成2个文件(./data/caltech_train.lst./data/caltech_test.lst),而是生成一个文件(./data/caltech.lst),原因如上所述。

    为了解决这个问题,需要执行正确的命令:

    os.system('python %s/tools/im2rec.py --list=1 --recursive=1 --shuffle=1 --test-ratio=0.2 --train-ratio=0.8 data/caltech data/101_ObjectCategories'%os.environ['MXNET_HOME'])
    

    在这一点上,我希望清楚造成混乱的原因以及所需键的工作方式。

    现在,根据问题的第二部分。 im2rec.py 是准备数据的辅助脚本。它与您实际计划如何使用数据的方式无关。因此它将标签存储为数字(顺便说一句,每个图像可能有超过 1 个标签)。并且由此类列表的消费者将标签编号转换为他/她想要用于培训的任何内容。您可以将它与 SoftMax 一起使用,方法是创建一个大小等于标签数量的向量并将 1 设置为索引等于标签编号的单元格。

    PS:如果读者有时间,我会鼓励读者将带有固定命令的 pull-request 连同文章一起提交到存储库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      相关资源
      最近更新 更多