有关回归神经网络推广的建议

时间:2019-02-01 18:49:58

标签: machine-learning keras deep-learning

我已经训练了一个具有数百个功能的深度神经网络,该网络分析城市的地理数据,并根据观察者与目标位置之间的轮廓来计算每个样本的得分。也就是说,观察者与目标之间的距离越长,我将为该样本提供的功能越多。当我用一个城市的一部分训练样本的NN并在同一城市的其他地方进行测试时,NN效果很好,但是当我将NN应用于其他城市时,NN开始产生很高的误差标准偏差,尤其是在我正在应用NN的城市样本通常比我用来训练NN的城市样本具有更多特征的情况下。为了解决这个问题,我在训练中附加了10%的空样本,这可以将误差减少一半,但是与手工计算的解决方案相比,剩余的误差仍然太大。我可以建议归纳回归神经网络吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我想询问更多有关您的数据和网络的示例,但这并不重要。

  

如何提高回归神经网络的泛化能力?

您可以使用与分类神经网络完全相同的东西。唯一的区别是对倒数第二层输出的数字有何作用!

  

我在训练中附加了10%的空样本,这样可以将错误减少一半,

我不太清楚这意味着什么(因此,如果您使用一些更具体的细节扩展问题,我仍然很感兴趣),但这听起来有点像使用辍学。在Keras中,您可以在其他图层之间附加一个Dropout()图层:

...
model.append(Dense(...))
model.append(Dropout(0.2))
model.append(Dense(...))
...

0.2表示辍学率为20%,这是一个不错的起点:您可以尝试使用最大约0.5的值。 您可以阅读the original paperthis article似乎是有关keras示例的不错介绍。

另一种通用技术是添加一些L1和/或L2正则化,这里是the manual entry

我通常使用网格搜索来对其中的每一项进行实验,例如为L1和L2分别尝试0、1e-6、1e-5中的每一个,并分别为0、0.2、0.4(为简单起见,通常在所有层之间使用相同的值)进行丢弃。 (如果1e-5最好,我可能还会尝试5e-4和1e-4。)

但是,请记住,更多的培训数据比上面的还要好。还可以考虑使用领域知识来添加更多数据或更多功能。