【发布时间】:2012-01-07 14:22:57
【问题描述】:
我真的需要帮助在一个非常基本的神经网络中实现一个连续的 tanh-sigmoid 激活函数。如果您能给出一个很棒的基本示例,但如果您可以在我的source code 中更改它,我将非常感激!另外,随机权重应该从什么范围开始(即什么范围)?
【问题讨论】:
标签: javascript artificial-intelligence neural-network
我真的需要帮助在一个非常基本的神经网络中实现一个连续的 tanh-sigmoid 激活函数。如果您能给出一个很棒的基本示例,但如果您可以在我的source code 中更改它,我将非常感激!另外,随机权重应该从什么范围开始(即什么范围)?
【问题讨论】:
标签: javascript artificial-intelligence neural-network
权重范围取决于您拥有的输入数据范围。在某些实现中,权重也可以是负数。
对于可能的 Sigmoid 函数,请在此处查看(tanh 不是唯一的可能性):
http://en.wikipedia.org/wiki/Sigmoid_function
提示:您通常可以使用矩阵乘法计算 NN。
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] 作为输出值的范围——因此你可能需要不同的 sigmoid 函数!
您需要获取输入值的预期范围和输出值的预期范围,并使用它们来移动实际的 sigmoid 函数、权重范围和阈值。
通常使用 0.7 或更大的阈值。您需要对此进行试验。
【讨论】:
this.output = 2 / (1 + Math.exp(-2 * input)) - 1;
【讨论】: