我有一个包含三层的神经网络。我尝试使用tanh和sigmoid函数进行激活,然后输出层只是一个简单的线性函数(我正在尝试为回归问题建模)。
由于某种原因,我的模型似乎很难被切断,因此永远无法预测某个阈值以上的值(即使应该)。可能有什么原因?
这是来自模型的预测结果(具有S型激活):
更新:
通过relu激活,从梯度下降切换到Adam,并添加L2正则化...该模型为每个输入预测相同的值...
答案 0 :(得分:1)
回归单个值的线性层将具有以下形式的输出
output = bias + sum(kernel * inputs)
如果输入来自tanh
,则-1 <= inputs <= 1
,因此
bias - sum(abs(kernel)) <= output <= bias + sum(abs(kernel))
如果您想要无限制的输出,请考虑在所有中间层上使用无限制的激活,例如relu
。
答案 1 :(得分:0)
我认为您的问题与模型的概括性/表达性有关。回归是一项基本任务,方法本身应该没有问题,但是执行方面应该没有问题。 @DomJack解释了如何限制一组特定参数的输出,但这仅在异常数据时发生。通常,当调整训练参数时,它将正确预测输出。
因此,第一点是关于训练数据的质量。确保您有足够大的训练数据(如果从一个数据集中分割训练/测试,则将其随机分割)。另外,也许是微不足道的,但是请确保在预处理中不要弄乱输入/输出值。
另一点是关于网络的规模。确保使用足够大的隐藏层。