我的神经网络的输出层(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-γ))
这并没有为所提到的培训模式收敛(如果我没有做错任何事)。请问有什么建议吗?
答案 0 :(得分:3)
对于分类问题,通常在输出层使用sigmoid / logistic激活函数来获得[0,1]范围内的正确概率值;加上1-N编码用于多类分类,每个节点输出将表示实例属于每个类值的概率。
另一方面,如果您有回归问题,则无需在输出上应用其他函数,您只需采用原始线性组合输出即可。网络将自动学习权重,以提供您拥有的任何输出值(即使是数千个)。
您还应注意的是缩放输入要素(例如,将所有要素归一化到范围[-1,1])。
答案 1 :(得分:1)
将输出缩放到您想要的值,或者将训练数据归一化回到[0,1]的范围是显而易见的解决方案。我想不出任何先验的原因,缩放需要是线性的(虽然它显然想要单调增加)所以你可能会修改日志函数,这里。
你有什么样的问题,你有这么大的范围吗?