Диапазон веса зависит от того, какой диапазон входных данных у вас есть. В некоторых реализациях веса также могут быть отрицательными.
Для возможных функций сигмоида, проверьте здесь (tanh не единственная возможность):
http://en.wikipedia.org/wiki/Sigmoid_function
Подсказка: обычно вы можете вычислить NN с умножением матрицы.
http://www.dtreg.com/mlfn.htm
http://en.wikipedia.org/wiki/Neural_network
P.S .: вероятно, не очень хорошая идея делать это в JavaScript.
вы можете реализовать его через exp (x), см .: http://www.javascripter.net/faq/mathfunc.htm
sinh(x) exp(x) - exp(-x) exp(2x) - 1
tanh(x) = ------- = ------------------ = -------------
cosh(x) exp(x) + exp(-x) exp(2x) + 1
, что дает вам:
function tanh(x) {
e = Math.exp(2*x);
return (e - 1) / (e + 1) ;
};
другое решение - сохранить таблицу со значениями функции tanh в массиве и определить функцию JavaScript, которая интерполирует значения tanh для x на основе значений tanh, хранящихся в массиве
как правило, люди не хотят [-inf ... + inf] в качестве диапазона входных значений, и не хотят [-1 ... + 1] в качестве диапазона выходных значений - поэтому вы может потребоваться другая сигмоидальная функция!
вам нужно взять ожидаемый диапазон входных значений и ожидаемый диапазон выходных значений и использовать их для сдвига действительной сигмоидальной функции, диапазонов веса и значения порога.
обычно используется порог 0,7 или более. Вам нужно поэкспериментировать с этим.