CNTK:功能开始设置为 1 - UCIFastReader 的机制

CNTK: Start of features is set to 1 - mechanism of UCIFastReader

对于这个相当简单的问题,我们深表歉意,但是关于 Microsoft 的 OpenSource AI 库 CNTK 的使用的文档还太少。

我继续目睹人们将 reader 的特征开始设置为 1,同时将标签开始设置为 0。但是它们是否应该始终为 0,就像计算机科学中的信息总是从零点?这样岂不是丢失了一条信息?

CIFAR10 示例02_BatchNormConv

    features=[
    #dimension = 3 (rgb) * 32 (width) * 32(length)
        dim=3072
        start=1
    ]
    labels=[
        dim=1
        start=0
        labelDim=10
        labelMappingFile=$DataDir$/labelsmap.txt
    ]

更新:新格式

Microsoft 最近对此进行了更新,以消除这些混淆并使 CNTK 定义语言更具可读性。

您现在不必在行内定义值的开头,只需在数据集本身中定义数据类型即可:

|labels <tab seperated values> | features <tab seperated values> [EndOfLine/EOL]

如果你想颠倒特征和标签的顺序,你可以简单地去:

|features <tab seperated values> | labels <tab seperated values> [EndOfLine/EOL]

您只需定义dim值,即可指定您要输入的值的数量。

注:行尾没有|。 EOL 表示行尾。

For more information visit the CNTK Wiki on this topic.

您误解了 reader 的工作原理。 UCIFastReader 适用于包含制表符分隔特征向量的文件。此文件中的每一行对应一个条目(在本例中为图像)及其分类。

因此,dim 告诉 reader 要读取多少列,而 start 告诉 reader 从哪一列开始读取。 因此,如果您有一张大小为 2x2 的图像,每个图像有 2 个标签,则您的文件的格式可能是 <image_pixel_columns><label_columns>:

0 0 0 0 0 0
0 0 1 0 1 0
...

所以该行的前 4 个条目是您的特征(图像像素值),最后两个是您的标签。您的 reader 将采用以下形式:

reader=[
        readerType=UCIFastReader
        file=$DataDir$/Train.txt
        randomize=None
        features=[
            dim=4
            start=0
        ]
        labels=[
            dim=2
            start=4
            labelDim=10
            labelMappingFile=$DataDir$/labelsmap.txt
        ]
    ]

只是给出的所有示例都将标签放在第一列。