CNTK分类模型对所有1

时间:2017-04-19 05:39:05

标签: cntk

我有一个cntk模型,它接受与点击和其他信息相关的功能,并预测将来是否会点击某些内容。然而,使用随机森林中的相同功能可以正常工作,cntk对所有这些进行分类1.为什么会发生这种情况?是否需要进行参数调整?功能有不同的规模。 我的列车行动如下:

    BrainScriptNetworkBuilder = [
    inputD = $inputD$
    labelD = $labelD$
    #hidden1 = $hidden1$
    model(features) = {
        w0 = ParameterTensor{(1 : 2), initValueScale=10}; b0 = ParameterTensor{1, initValueScale=10};
        h1 = w0*features + b0; #hidden layer
        z = Sigmoid (h1)
    }.z
    features = Input(inputD)
    labels = Input(labelD)

    z = model(features)
    #now that we have output, find error
    err = SquareError (labels, z)
    lr = Logistic (labels, z)
    output = z

    criterionNodes = (err)
    evaluationNodes = (err)
    outputNodes = (z)
]

SGD = [
    epochSize = 4 #learn
    minibatchSize = 1 #learn
    maxEpochs = 1000 #learn
    learningRatesPerSample = 1
    numMBsToShowResult = 10000
    firstMBsToShowResult = 10
]

3 个答案:

答案 0 :(得分:1)

除了KeD所说的,随机森林不关心特征的实际值,只关心它们的相对顺序。

与树不同,神经网络对特征的实际值敏感(而不仅仅是它们的相对顺序)。

您的输入可能包含一些值非常大的功能。你应该重新编码它们。这样做有不同的方案。一种可能性是从每个特征中减去平均值并将其缩放到-1,1或除以它的标准偏差。正特征的另一种可能性是诸如f =>之类的变换。日志(1 + F)。您也可以使用批量规范化层。

答案 1 :(得分:1)

由于您的功能具有不同的比例,我建议您对功能进行规范化。你提到过,cntk将所有输入分类为1.我假设当你预测使用训练模型时会发生这种情况。但是,培训期间会发生什么?你能在图表上绘制训练+测试错误的图表(cntk现在支持TensorBoard)吗?这会给你一些关于你的模型是否过度拟合的指示。此外,作为一方,我建议增加模型的学习能力(最有可能的是,通过增加隐藏层数)来学习更好的数据分发。

答案 2 :(得分:0)

似乎学习率太高,请尝试learningRatesPerSample = 0.001