2017-04-10 39 views
1

作为一个CNTK学习练习,我想我会修改Logistic回归示例从lr_bs.cntk,并尝试获得基本的线性回归工作。基本线性回归:训练准则是NaN

取而代之的是在物流例如:

# 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数据集创建的文件上运行它。我无法实现它的工作,并且我对如何前进感到不知所措。

火车命令失败,有如下诊断:

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来读取数据,也许问题是数据读取部分,但没有调试我不能确定。

任何关于如何解决这个问题的建议都会非常感激。

回答

2

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

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

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

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

+0

谢谢 - 应该考虑一下。我没有得到方差是如何产生“不是数字”的,但是选择得不好的学习速度确实会造成问题:)降低速度确实解决了这个问题。 – Mathias

相关问题