Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 神经网络中激活函数的确定_Python_Neural Network_Backpropagation_Feed Forward - Fatal编程技术网

Python 神经网络中激活函数的确定

Python 神经网络中激活函数的确定,python,neural-network,backpropagation,feed-forward,Python,Neural Network,Backpropagation,Feed Forward,我使用前馈,反向传播,多层神经网络,我使用S形函数作为激活函数,其范围为-1到1。但最小误差不低于5.8,我希望如此之小,您可以在100000次迭代后看到输出。 我想这是因为我的输出范围在1以上,而sigmoid函数的范围只有-1到1。有谁能建议我如何克服这个问题,因为我期望的输出范围是0到2.5。建议我哪个激活功能最适合这个范围。香草乙状结肠功能是: def sigmoid(x): return 1/(1+math.e**-x) 您可以将其转换为: def mySigmoid(x)

我使用前馈,反向传播,多层神经网络,我使用S形函数作为激活函数,其范围为-1到1。但最小误差不低于5.8,我希望如此之小,您可以在100000次迭代后看到输出。


我想这是因为我的输出范围在1以上,而sigmoid函数的范围只有-1到1。有谁能建议我如何克服这个问题,因为我期望的输出范围是0到2.5。建议我哪个激活功能最适合这个范围。

香草乙状结肠功能是:

def sigmoid(x):
    return 1/(1+math.e**-x)
您可以将其转换为:

def mySigmoid(x):
    return 2.5/(1+math.e**-x)

为了进行所需的转换,标准的S形函数是:

def sigmoid(x):
    return 1/(1+math.e**-x)
您可以将其转换为:

def mySigmoid(x):
    return 2.5/(1+math.e**-x)

如果您希望减少输出错误,则要进行所需的转换,在调整节点的激活函数之前,有几件事需要考虑

首先,你有一个偏置节点吗?偏差节点有几个含义,但与本讨论最相关的是,它们允许将网络输出转换为所需的输出范围。如各国所述:

在神经网络中使用偏差,通过允许将分离单个类的超平面偏移以获得更好的定位,提高了网络解决问题的能力

这篇文章提供了一个非常好的讨论: . 这个也不错:

第二种方法:它通常有助于规范化您的输入和输出。正如您所注意到的,您的乙状结肠提供了+/-1的范围。当尝试学习范围为0到1000(例如)的函数时,这个小范围可能会有问题。为了帮助学习,通常需要缩放和转换输入以适应节点激活功能。在本例中,可以将范围除以500,得到0到2的范围,然后从该范围中减去1。通过这种方式,输入被标准化为-1到1的范围,这更适合激活函数。请注意,网络输出应该是非规范化的:首先,将输出加+1,然后乘以500

在您的情况下,您可以考虑将输入缩放0.8,然后从结果中减去1。然后将网络输出加1,然后乘以1.25以恢复所需范围。请注意,此方法可能最容易实现,因为它不会像添加偏差那样直接更改网络拓扑

最后,您是否尝试过更改隐藏节点的数量?虽然我认为前两个选项更适合提高性能,但您可以尝试一下这个选项。(作为参考,我想不起修改激活函数的形状比选项1和2更能改善网络响应的例子。)

下面是对隐藏层/节点配置的一些很好的讨论:


24个输入使您的问题成为高维问题。确保您的培训数据集充分覆盖了输入状态空间,并确保您的测试数据和培训数据是从具有类似代表性的人群中提取的。(在训练神经网络时,请查看“交叉验证”讨论)。

如果您希望减少输出误差,在调整节点的激活函数之前,有几件事需要注意

首先,你有一个偏置节点吗?偏差节点有几个含义,但与本讨论最相关的是,它们允许将网络输出转换为所需的输出范围。如各国所述:

在神经网络中使用偏差,通过允许将分离单个类的超平面偏移以获得更好的定位,提高了网络解决问题的能力

这篇文章提供了一个非常好的讨论: . 这个也不错:

第二种方法:它通常有助于规范化您的输入和输出。正如您所注意到的,您的乙状结肠提供了+/-1的范围。当尝试学习范围为0到1000(例如)的函数时,这个小范围可能会有问题。为了帮助学习,通常需要缩放和转换输入以适应节点激活功能。在本例中,可以将范围除以500,得到0到2的范围,然后从该范围中减去1。通过这种方式,输入被标准化为-1到1的范围,这更适合激活函数。请注意,网络输出应该是非规范化的:首先,将输出加+1,然后乘以500

在您的情况下,您可以考虑将输入缩放0.8,然后从结果中减去1。然后将网络输出加1,然后乘以1.25以恢复所需范围。请注意,此方法可能最容易实现,因为它不会像添加偏差那样直接更改网络拓扑

最后,您是否尝试过更改隐藏节点的数量?虽然我认为前两个选项更适合提高性能,但您可以尝试一下这个选项。(作为参考,我想不起修改激活函数的形状比选项1和2更能改善网络响应的例子。)

下面是对隐藏层/节点配置的一些很好的讨论:


24个输入使您的问题成为高维问题。确保您的培训数据集充分覆盖了输入状态空间,并确保您的测试数据和培训数据是从具有类似代表性的人群中提取的。(请查看训练神经网络时的“交叉验证”讨论)。

我尝试了您建议的选项,但给出的错误为:OverflowerError:(34,‘数值结果超出范围’)这样,我就可以通过除以某个数字,将所需的值设置在-1到1之间,得到结果后,我可以再次使用sigmoid函数将该结果乘以相同的数字。@L