【问题标题】:Basic linear regression: training criterion is NaN基本线性回归:训练标准为 NaN
【发布时间】:2017-04-10 01:34:01
【问题描述】:

作为 CNTK 学习练习,我想我会修改来自 lr_bs.cntk 的逻辑回归示例,并尝试使基本的线性回归正常工作。

在逻辑示例中改为:

# parameters to learn
b = Parameter (LDim, 1)     # bias
w = Parameter (LDim, SDim)  # weights

# operations
p = Sigmoid (w * features + b)    

lr = Logistic (labels, p)
err = SquareError (labels, p)

# root nodes
featureNodes    = (features)
labelNodes      = (labels)
criterionNodes  = (lr)
evaluationNodes = (err)
outputNodes     = (p)

...我只是将代码更改为:

# operations
p = (w * features + b)

lr = SquareError (labels, p)
err = SquareError (labels, p)

我让它在我创建的合成数据集上工作。但是,我尝试在我从 Wine Quality 数据集创建的文件上运行它。我无法让它工作,我不知道如何前进。

Train 命令失败,诊断如下:

EXCEPTION occurred: The training criterion is not a number (NAN).

我将此解释为lr 没有生成有效数字。我只是不明白SquareError 怎么会失败,以及如何解决这个问题。

有关信息,以下是数据集在准备后的样子:

|features 7.400 0.700 0.000 1.900 |labels 5.000
|features 7.800 0.880 0.000 2.600 |labels 5.000
|features 7.800 0.760 0.040 2.300 |labels 5.000
|features 11.200 0.280 0.560 1.900 |labels 6.000
|features 7.400 0.700 0.000 1.900 |labels 5.000

我看不到任何明显有问题的数据问题。我使用CNTKTextFormatReader读取数据,可能问题出在数据读取部分,但没有调试我无法确定。

任何关于如何解决此问题的建议将不胜感激。

【问题讨论】:

    标签: cntk brainscript


    【解决方案1】:

    我有一个非常相似的入门想法,除了我修改了逻辑回归的 Python 教程以创建线性回归示例。

    我发现逻辑示例中指定的学习率太大而无法与线性回归所需的平方误差损失函数一起使用。因此,作为第一个建议,我建议您尝试将 learningRatesPerSample 减小到 0.001 或更小。

    我对你看到的错误代码进行了快速的谷歌搜索,并返回了this issue,这也表明学习率可能是你的罪魁祸首。

    如果你有兴趣,我写了一个blog post,关于我在 Python 中的线性回归示例。

    【讨论】:

    • 谢谢 - 应该考虑到这一点。我不明白平方误差如何产生“不是数字”,但选择不当的学习率确实会导致问题:) 降低学习率确实解决了问题。
    • 我在 22 个 epochs 后得到了 NaN,这实际上是由于每个 epoch 从大约 0.12(epoch #1)到 Infinity(epoch #11)到 NaN(epoch #22)的错误引起的。我想大的学习率(0.04)使调整过冲,导致每个时期的错误更高。将学习率更改为 0.001 修复了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2022-07-14
    • 2020-11-04
    • 2015-11-13
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多