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

Ash*_*man 3 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))))

激活的导数:


lambda*(abs(y) y (1-y))

对于提到的训练模式,这并没有收敛(如果我没有做错任何事情)。请问有什么建议吗?

Amr*_*mro 6

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

另一方面,如果您遇到回归问题,则无需对输出应用附加函数,只需获取原始线性组合输出即可。网络将自动学习权重以给出您拥有的任何输出值(即使是数千个)。

您还应该注意的是缩放输入特征(例如,将所有特征标准化到范围 [-1,1])。