Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的TensorFlow NN模型';s的预测值有上限吗?_Python_Tensorflow - Fatal编程技术网

Python 为什么我的TensorFlow NN模型';s的预测值有上限吗?

Python 为什么我的TensorFlow NN模型';s的预测值有上限吗?,python,tensorflow,Python,Tensorflow,我有一个三层的神经网络。我已经尝试过使用tanh和sigmoid函数来激活,然后输出层只是一个简单的线性函数(我试图建模一个回归问题) 出于某种原因,我的模型似乎有一个硬边界,它永远不会预测超过某个阈值的值(即使它应该)。这有什么原因呢 以下是模型的预测结果(乙状结肠激活): 更新: 通过relu激活,从梯度下降切换到Adam,并添加L2正则化。。。该模型预测的每个输入值相同 对单个值进行回归的线性层将具有以下形式的输出 output = bias + sum(kernel * inputs)

我有一个三层的神经网络。我已经尝试过使用tanh和sigmoid函数来激活,然后输出层只是一个简单的线性函数(我试图建模一个回归问题)

出于某种原因,我的模型似乎有一个硬边界,它永远不会预测超过某个阈值的值(即使它应该)。这有什么原因呢

以下是模型的预测结果(乙状结肠激活):

更新:

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


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

output = bias + sum(kernel * inputs)

如果输入来自
tanh
,那么
-1我认为您的问题与模型的泛化/表达能力有关。回归是一项基本任务,方法本身应该并没有问题,但执行上应该有问题@DomJack解释了如何对一组特定参数的输出进行限制,但这仅适用于异常数据。一般来说,何时调整训练参数,以便正确预测输出

所以第一点是关于训练数据的质量。确保您有足够大的训练数据(如果您从一个数据集分割训练/测试,则会随机分割)。另外,可能很琐碎,但请确保在预处理过程中没有弄乱输入/输出值


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

您的损失是什么?我使用的是成本函数的均方误差。我要试试L2的损失,看看这会不会有什么不同。其实没关系。请看下面的答案。对不起,我以为relu总是给我相同的预测值,但事实证明我在第一层做的是sigmoid,然后在第二层做的是relu。无论如何,如果我在所有的激活中使用relu,我会遇到一个奇怪的问题,我的代价函数(均方误差)会随着每个历元而增加,而不是减少。这是一个非常不同的问题。这是培训或评估的损失吗?如果EVA/TestSub,您可能过度拟合-考虑添加一些描述的正则化或减少网络的参数(层/节点)的数量。如果在火车上,我会尝试,顺序是:规范化输入,规范化标签,降低学习率,不同的优化器。我从梯度下降切换到adam优化器,并实施L2正则化,我又回到了成本递减函数。但是现在我的模型只是预测每个输入的相同值…是的,不再是相同的问题了,我想使用relu,或者其他一些不将值限制在一定范围内的激活函数,这就是我问题的答案。也许我应该为我现在的问题提出一个新问题。。。
bias - sum(abs(kernel)) <= output <= bias + sum(abs(kernel))