我有一个看起来像这样的函数:
y = a^(2b) + c^(2d)
我想通过使用反向传播训练神经网络来近似这个功能。变量a
,b
,c
和d
的范围目前对我来说是不确定的,所以首先我假设它们都在[0, 1]。然后我通过假设变量的均匀分布来生成训练集。在找到适当数量的隐藏节点和层以及反向传播的学习速率和动量的良好值之后,我可以使用该范围在测试集上达到低平均误差。但是,只要我将变量的范围更改为[-1,1],错误就会增加很多。
我需要改变神经网络的结构(参见下面的文章)和反向传播的参数是否正常,这取决于我提供给网络的变量范围?或者这可能与隐藏层中具有S形激活函数的节点有关?
注意:当变量的范围不是[0,1]时,我将其标准化为该范围,因此它将与sigmoid函数一起使用。另请注意,回答问题时,函数可能不是y
,但提供了一些背景信息。
答案 0 :(得分:0)
输出图层中的节点是否也是sigmoid?因为如果是这样,那么他们永远无法复制您的输入函数:对于b
和d
的负值,y
接近无穷大a
和c
接近零。
简单地说一下你可以尝试的一些可能的东西,我绝对不是专家,所以请大家带上所有这些建议:
a, c in [-1, -epsilon] union [epsilon, 1]
将您的变量范围更改为epsilon >0
,以便您的功能受限制。y = a^(2b) + c^(2d)
,但这可能是作弊;)