Python CNTK,为什么miniatch数据没有批处理?

时间:2017-06-14 21:33:38

标签: cntk

我正在使用CNTK示例中的语言理解模型训练模型。 这是一个序列标记问题。对于每个查询中的每个单词,您希望预测正确的标签(16个可能的标签中)。

这就是我做的事情

        minibatch_size = 5
    data = reader.next_minibatch(minibatch_size, input_map={  # fetch minibatch
        x: reader.streams.query,
        y: reader.streams.slot_labels
    })
    if not data:                                 # until we hit the end
        break

    evaluator = C.eval.Evaluator(loss, progress_printer)
    evaluator.test_minibatch(data)
    res = model.eval(data)
    print("data[y].shape=", data[y].shape)
    print("")
    print("len(res)=", len(res), " shape=", res[0].shape)

数据形状[y] .shape为1 * 3 * 16,或2 * 4 * 16等。

我认为3/4表示我的查询中的单词数。 16是单热矢量的大小。所以1 /必须是批量大小。但是,我将批量大小设置为5,为什么它不等于5?

另一个令人困惑的事情是,如果我做“t + = data [y] .num_samples”,t开头可以是~60。 num_samples和num_sequences在minibatchData中意味着什么?

此外,如果它是2 * 4 * 16,是否意味着两个查询都长度为4?这是否意味着程序会将我的测试数据混合以组合相同长度的查询?或者一般来说,如果我设置randomized = False,顺序是否应该与我的测试数据相同?

1 个答案:

答案 0 :(得分:0)

因为CNTK将序列的每个数据点计为“样本”,并且样本中指定的小批量大小不是序列数。

请参阅https://docs.microsoft.com/en-us/cognitive-toolkit/interpreting-epoch_size-and-minibatch_size_in_samples-and-minibatchsource.next_minibatch-in-cntk