我有一个看起来像这样的函数:
y = a^(2b) + c^(2d)
我想通过使用反向传播训练神经网络来近似这个函数。变量范围
a
, b
, c
和 d
目前对我来说是不确定的,所以首先我假设它们都在 [0, 1] 的范围内。然后我通过假设变量的均匀分布来生成一个训练集。在找到合适数量的隐藏节点和层以及反向传播的学习率和动量的良好值后,我可以使用此范围在测试集上达到较低的平均误差。但是,一旦我将变量的范围更改为 [-1, 1] 之类的值,错误就会增加很多。我需要根据我提供给网络的变量范围来改变神经网络的结构(见下面的评论)和反向传播的参数是否正常?或者这可能与隐藏层中具有 sigmoid 激活函数的节点有关?
注意:当变量的范围不是 [0, 1] 时,我将其标准化为该范围,以便它可以与 sigmoid 函数一起使用。另请注意,该函数可能不是
y
不是回答问题所必需的,但提供了一些上下文。
最佳答案
输出层中的节点也是 sigmoid 吗?因为如果是这样,那么他们将永远无法复制您的输入函数:对于 b
的负值和 d
, y
接近无穷大 a
和 c
接近零。
只是想出一些你可以尝试的可能的事情,我绝对不是专家,所以对所有这些建议持保留态度:
类似于“中值平方根误差”之类的东西,以允许偶尔出现大误差
a, c in [-1, -epsilon] union [epsilon, 1]
一些 epsilon >0
这样你的函数是有界的。 y = a^(2b) + c^(2d)
例如,但也许这会是作弊;) 关于neural-network - 用于逼近具有四个参数的函数的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236078/