machine-learning - MXNet ImageRecordIter 测试数据/标签格式

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

我在理解 MXNet ImageRecordIter 的工作原理时遇到了一些困难。 Here是我一直在使用的引用

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

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

最佳答案

让我们首先从 --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'])

此时我希望清楚困惑的根源是什么以及所需的 key 如何工作。

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

PS:如果读者有时间,我会鼓励使用固定命令向存储库提交拉取请求以及文章。

关于machine-learning - MXNet ImageRecordIter 测试数据/标签格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45497860/

相关文章:

deep-learning - 最大池层vs卷积的步伐表现

deep-learning - Keras - 时代相关损失函数

python - Google Colab 花费太多时间来训练分类器。如何解决这个问题?

python - 从具有特定列和条件的数据框中选择行(不使用列名)

sql - 将日期范围转换为行集

apache-spark - 如何计算 Spark 逻辑回归中的 p 值?

python keras如何改变卷积层到lstm层后输入的大小

python - 用于初始状态的每日天气预报的 LSTM 网络

tensorflow - 如何清理图像以与 MNIST 训练模型一起使用?

python - 值错误 : could not convert string to float: