神经网络偏差简单的工作原理
Neural Network bias simple workings
我已经在 Matlab 中创建了一个神经网络,现在我打算获取权重并在 C++ 中实现该网络。网络可以工作,但现在我正在尝试用 C++ 实现它,我觉得我并不真正理解它。
举一个非常简单的例子:一个输入->隐藏层中的三个节点(tansig)->一个输出节点(purelin)。
第一层的输入权重为:9.3842,
7.1205 ,
-14.6497
偏差为:-7.8820,
-3.4257,
-14.2522,
输出节点的权重为:0.5760,-0.9019,-0.4809,
偏差为:-0.1413
我一直在尝试输入 :0 和 0.498,目标为 5.0145 和 5.3314
问题是我无法通过手动执行计算来获得(或接近)这些目标。为了让您了解我在做什么,请将 0 作为输入;
0*w1 + b = -7.8820,
0*w2 + b2 = -3.4257 ,
0*w3 + b3 = -14.2522 ,
应用激活函数 tansig :
output1 = tansig(-7.8820) = -1
output2 = tansig(-3.4257) = -.997
output3 = tansig(-14.2522) = -1
对于最后一个节点,
output1*weight1 = -.5760
output2*weight2 = .900
output3*weight3 = .4809
总和 + b = .9462
这就是我的想法,但显然不是。我想也许我不明白 tansig 激活函数发生了什么。
感谢阅读和任何帮助,
你的tansig()
激活函数的范围是-1到1,所以它可能是一个tanh()
。它看起来像 sigmoid()*2-1
或 arctan()*2/PI
,但曲线略有不同。您可能想看看 tanh() 是什么样子的:http://www.wolframalpha.com/input/?i=y%3Dtanh%28x%29
你的伪代码看起来不错,但我没有尝试把数字放回去。也许你唯一忘记写的是:
sum = output1*weight1 + output2*weight2 + output3*weight3
final_output = sum + b
不要忘记在这样的神经网络中权重是随机初始化的,并且需要使用反向传播算法(通过大循环中每个权重的多次梯度下降)或其他类似的学习技术来学习它们。
所以,愚蠢的我,问题是我忘记了缩放。 NN(在 Matlab 中)自动缩放 [0,1] 之间的输入。
我已经在 Matlab 中创建了一个神经网络,现在我打算获取权重并在 C++ 中实现该网络。网络可以工作,但现在我正在尝试用 C++ 实现它,我觉得我并不真正理解它。
举一个非常简单的例子:一个输入->隐藏层中的三个节点(tansig)->一个输出节点(purelin)。
第一层的输入权重为:9.3842, 7.1205 , -14.6497
偏差为:-7.8820, -3.4257, -14.2522,
输出节点的权重为:0.5760,-0.9019,-0.4809,
偏差为:-0.1413
我一直在尝试输入 :0 和 0.498,目标为 5.0145 和 5.3314
问题是我无法通过手动执行计算来获得(或接近)这些目标。为了让您了解我在做什么,请将 0 作为输入;
0*w1 + b = -7.8820,
0*w2 + b2 = -3.4257 ,
0*w3 + b3 = -14.2522 ,
应用激活函数 tansig :
output1 = tansig(-7.8820) = -1
output2 = tansig(-3.4257) = -.997
output3 = tansig(-14.2522) = -1
对于最后一个节点,
output1*weight1 = -.5760
output2*weight2 = .900
output3*weight3 = .4809
总和 + b = .9462
这就是我的想法,但显然不是。我想也许我不明白 tansig 激活函数发生了什么。
感谢阅读和任何帮助,
你的tansig()
激活函数的范围是-1到1,所以它可能是一个tanh()
。它看起来像 sigmoid()*2-1
或 arctan()*2/PI
,但曲线略有不同。您可能想看看 tanh() 是什么样子的:http://www.wolframalpha.com/input/?i=y%3Dtanh%28x%29
你的伪代码看起来不错,但我没有尝试把数字放回去。也许你唯一忘记写的是:
sum = output1*weight1 + output2*weight2 + output3*weight3
final_output = sum + b
不要忘记在这样的神经网络中权重是随机初始化的,并且需要使用反向传播算法(通过大循环中每个权重的多次梯度下降)或其他类似的学习技术来学习它们。
所以,愚蠢的我,问题是我忘记了缩放。 NN(在 Matlab 中)自动缩放 [0,1] 之间的输入。