神经网络输出:缩放输出范围

时间:2012-01-28 19:47:10

标签: matlab artificial-intelligence neural-network

我的神经网络的输出层(3层)使用sigmoid作为激活,仅在范围[0-1]内输出。但是,如果我想训练超过[0-1]的输出,比如数千,那我该怎么办?

例如,如果我想训练

输入---->输出

0 0 ------> 0

0 1 ------> 1000

1000 1 ----> 1

1 1 -------> 0

我的程序适用于AND,OR,XOR等。因为输入输出都是二进制的。

有一些建议可以使用,

激活:


y = lambda *(abs(x) 1 /(1 + exp(-1 (x))))

激活衍生物:


拉​​姆达*(ABS(Y)ý(1-γ))

这并没有为所提到的培训模式收敛(如果我没有做错任何事)。请问有什么建议吗?

2 个答案:

答案 0 :(得分:3)

对于分类问题,通常在输出层使用sigmoid / logistic激活函数来获得[0,1]范围内的正确概率值;加上1-N编码用于多类分类,每个节点输出将表示实例属于每个类值的概率。

另一方面,如果您有回归问题,则无需在输出上应用其他函数,您只需采用原始线性组合输出即可。网络将自动学习权重,以提供您拥有的任何输出值(即使是数千个)。

您还应注意的是缩放输入要素(例如,将所有要素归一化到范围[-1,1])。

答案 1 :(得分:1)

将输出缩放到您想要的值,或者将训练数据归一化回到[0,1]的范围是显而易见的解决方案。我想不出任何先验的原因,缩放需要是线性的(虽然它显然想要单调增加)所以你可能会修改日志函数,这里。

你有什么样的问题,你有这么大的范围吗?