神经网络偏向简单的工作

时间:2015-07-15 13:33:25

标签: neural-network

我在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

sum + b = .9462

我认为这是有效的,但显然不是。我想也许我不明白tansig激活功能发生了什么。

感谢阅读和任何帮助,

2 个答案:

答案 0 :(得分:0)

您的tansig()激活函数的范围是-1到1,因此它可能是tanh()。它看起来像sigmoid()*2-1arctan()*2/PI,但曲线的变化略有不同。您可能想看看tanh()的样子:http://www.wolframalpha.com/input/?i=y%3Dtanh%28x%29

你的伪代码看起来不错,但我并没有试着把数字放回去。也许你唯一忘记写的是:

sum = output1*weight1 + output2*weight2 + output3*weight3
final_output = sum + b

不要忘记在这样的神经网络中随机初始化权重,并且需要使用反向传播算法(通过大循环中每个权重的许多梯度下降)或其他类似的学习技术来学习权重。

答案 1 :(得分:0)

所以,愚蠢的我,问题是我忘记了缩放。 NN(在Matlab中)自动缩放[0,1]之间的输入。