我正在尝试实现识别神经网络的图片, 我正面临一个问题...
当我使用sigmoid函数时,我得到了很好的结果,但它们介于0和1之间。我需要得到0到9之间的结果,
当我使用线性激活函数时,数字会在早期变得非常大,导致javascript中出现Infinity
和NaN
。
当我使用SoftPlus时,数字变得很小,导致NaN
...我应该使用什么激活功能?
答案 0 :(得分:0)
您必须在[0,9]范围内对输出进行标准化(假设连续输出),以便在[0,1]范围内获得标准化输出,然后使用sigmoid激活。
如果您想要从0到9(整数)的离散输出,那么这是一个分类问题,您应该使用softmax激活。
答案 1 :(得分:0)
我看到你正在使用Javascript。我已经建立了一个高度可定制的javascript神经网络库。看看here。它有不同的内置激活函数列出here,但它们很容易修改!
所以逻辑函数写成这样:
LOGISTIC : function(x, derivate) {
if (!derivate)
return 1 / (1 + Math.exp(-x));
var fx = Activation.LOGISTIC(x);
return fx * (1 - fx);
},
因此,如果您希望输出介于0和9之间,则可以创建自定义后勤激活功能:
CUSTOM_LOGISTIC : function(x, derivate) {
if (!derivate)
return 1 / (1 + Math.exp(-x)) * 9;
var fx = Activation.CUSTOM_LOGISTIC(x);
return fx * (1 - fx);
},
并将此激活功能分配给您的输出神经元/节点。