那么,精确值是多少呢,今天,就画个图来看看:
下面是一些点上的具体值,可以看到, x=4时,函数值已经到0.98以上了,而导数已经降到峰值的 十分之一以下了。
训练的时候不能太进入饱和区,但是如果完全在线性区,多层神经网络是没有意义的(多层线性网络还是线性的。。。);
根据这些值,可以为网络权重的初始值设置给个大致的参考吧~
x=-8, 函数值为:0.00034, 导数为:0.00034 x=-6, 函数值为:0.00247, 导数为:0.00247 x=-4, 函数值为:0.01799, 导数为:0.01766 x=-2, 函数值为:0.11920, 导数为:0.10499 x= 0, 函数值为:0.50000, 导数为:0.25000 x= 2, 函数值为:0.88080, 导数为:0.10499 x= 4, 函数值为:0.98201, 导数为:0.01766 x= 6, 函数值为:0.99753, 导数为:0.00247 x= 8, 函数值为:0.99966, 导数为:0.00034
代码如下:
close all fsigmoid=@(x) 1./(1+exp(-x)); x=-8:.1:8; y=fsigmoid(x); fdy_dz=@(y) y.*(1-y); dsig=fdy_dz(y); fontSize=20; subplot(121); plot(x,y); title('sigmoid函数','FontSize',fontSize) xlabel('x','FontSize',fontSize) ylabel('sigmoid(x)','FontSize',fontSize) grid on % axis equal subplot(122); plot(x,dsig); title('sigmoid函数的导数','FontSize',fontSize) xlabel('x','FontSize',fontSize) ylabel('d sigmoid(x) /dx','FontSize',fontSize) grid on idx=find(mod(x,2)==0) for i=1:length(idx) fprintf('x=%2d,\t函数值为:%2.5f,\t导数为:%2.5f\n',x(idx(i)),y(idx(i)),dsig(idx(i))) end