我正在使用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,顺序是否应该与我的测试数据相同?
答案 0 :(得分:0)
因为CNTK将序列的每个数据点计为“样本”,并且样本中指定的小批量大小不是序列数。