我终于有时间建立我自己的ANN库,但是我在理解某些行为时遇到了一些困难。
以下是我编码的一些激活函数:
DoubleFunction<Double> sigmoid = x -> 1 / (1 + Math.exp(-x));
DoubleFunction<Double> sigmoidDer = x -> {
double s = sigmoid.apply(x);
return s * (1 - s);
};
DoubleFunction<Double> tanh = Math::tanh;
DoubleFunction<Double> tanhDer = x -> 1. - Math.pow(tanh.apply(x), 2);
DoubleFunction<Double> relu = x -> Math.max(0, x);
DoubleFunction<Double> reluDer = x -> {
if (x < 0)
return 0;
return 1;
};
DoubleFunction<Double> softPlus = x -> Math.log(1 + Math.exp(x));
在我的代码中,我只是选择一对作为激活函数(+衍生物)。
我的所有功能都没有转化为解决方案(我试图让网络学习XOR运算符),但tanh函数及其衍生物。
注意:我正在为输出常数1的每一层使用偏置神经元。
我已经检查了this但显然我在这里缺少一些基本的东西。
有人关心开导我吗?