private static double [] sigtab = new double[1001]; // values of f(x) for x values
static {
for(int i=0; i<1001; i++) {
double ifloat = i;
ifloat /= 100;
sigtab[i] = 1.0/(1.0 + Math.exp(-ifloat));
}
}
public static double fast_sigmoid (double x) {
if (x <= -10)
return 0.0;
else if (x >= 10)
return 1.0;
else {
double normx = Math.abs(x*100);
int i = (int)normx;
double lookup = sigtab[i] + (sigtab[i+1] - sigtab[i])*(normx - Math.floor(normx));
if (x > 0)
return lookup;
else // (x < 0)
return (1 - lookup);
}
}
任何人都知道爲什麼這個「快速S形」實際上運行速度慢於使用Math.exp的確切版本?查找錶快速S形功能
@Downvoter,如果你不同意'Math.floor'是一個瓶頸,[這裏是一個解釋(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6908131)。 – finnw 2011-01-30 15:16:33