为什么我的TensorFlow NN模型的预测值有上限?

时间:2018-07-05 00:13:54

标签: python tensorflow

我有一个包含三层的神经网络。我尝试使用tanh和sigmoid函数进行激活,然后输出层只是一个简单的线性函数(我正在尝试为回归问题建模)。

由于某种原因,我的模型似乎很难被切断,因此永远无法预测某个阈值以上的值(即使应该)。可能有什么原因?

这是来自模型的预测结果(具有S型激活):

enter image description here

更新:

通过relu激活,从梯度下降切换到Adam,并添加L2正则化...该模型为每个输入预测相同的值...

enter image description here

2 个答案:

答案 0 :(得分:1)

回归单个值的线性层将具有以下形式的输出

output = bias + sum(kernel * inputs)

如果输入来自tanh,则-1 <= inputs <= 1,因此

bias - sum(abs(kernel)) <= output <= bias + sum(abs(kernel))

如果您想要无限制的输出,请考虑在所有中间层上使用无限制的激活,例如relu

答案 1 :(得分:0)

我认为您的问题与模型的概括性/表达性有关。回归是一项基本任务,方法本身应该没有问题,但是执行方面应该没有问题。 @DomJack解释了如何限制一组特定参数的输出,但这仅在异常数据时发生。通常,当调整训练参数时,它将正确预测输出。

因此,第一点是关于训练数据的质量。确保您有足够大的训练数据(如果从一个数据集中分割训练/测试,则将其随机分割)。另外,也许是微不足道的,但是请确保在预处理中不要弄乱输入/输出值。

另一点是关于网络的规模。确保使用足够大的隐藏层。