BackPropagation神经网络方法 - 设计

时间:2015-12-19 23:57:33

标签: machine-learning neural-network backpropagation bias-neuron

我正在尝试制作数字识别程序。我将输入一个数字的白/黑图像,我的输出层将触发相应的数字(一个神经元将从输出层中的0 - > 9个神经元中射出)。我完成了一个二维BackPropagation神经网络。我的拓扑尺寸为[5] [3] - > [3] [3] - > 1 [10]。所以它是一个2-D输入层,一个2-D隐藏层和一个1-D输出层。但是我得到了奇怪和错误的结果(平均错误和输出值)。

在此阶段进行调试非常耗时。因此,我很想知道这是否是正确的设计,所以我继续调试。以下是我实施的流程步骤:

  • 构建网络:除了输出层(无偏差)之外,每个层都有一个偏差。 Bias的输出值总是= 1.0,但是它的Connections Weights会像网络中的所有其他神经元一样在每次传递时更新。所有重量范围均为0.000 - > 1.000(无底片)

  • 获取输入数据(0 | OR | 1)并将第n个值设置为输入图层中的第n个神经元输出值。

  • 前馈:在每个层中的每个神经元'n'上(输入层除外):

    • 获取连接神经元的SUM(输出值*连接权重)的结果 从前一层到第n个神经元。
    • 获取TanHyperbolic - 转移函数 - 此SUM作为结果
    • 将结果设置为此第n个神经元的输出值
  • 获取结果:获取输出图层中神经元的输出值

  • BackPropagation:

    • 计算网络错误:在输出层上,获取SUM神经元(目标值 - 输出值)^ 2。将此SUM除以输出图层的大小。获取SquareRoot作为结果。计算平均误差=(OldAverageError * SmoothingFactor *结果)/(SmoothingFactor + 1.00)
    • 计算输出层梯度:对于每个输出神经元'n',第n个梯度=(第n个目标值 - 第n个输出值)*第n个输出值TanHyperbolic Derivative
    • 计算隐藏层梯度:对于每个神经元'n',得到SUM(来自第n个神经元的重量的TanHyperbolic Derivative *目标神经元的梯度)作为结果。将(结果*此第n个输出值)指定为渐变。
    • 更新所有权重:从隐藏图层开始并返回到输入图层,对于第n个神经元:计算NewDeltaWeight =(NetLearningRate *第n个输出值*第n个渐变+动量* OldDeltaWeight)。然后将新权重指定为(OldWeight + NewDeltaWeight)
  • 重复过程。

这是我对第七位的尝试。输出是Neuron#zero和Neuron#6。神经元6应该携带1并且Neuron#zero应该携带0.在我的结果中,除了6之外的所有神经元都携带相同的值(#zero是样本)。

Sample Results

对不起,很长的帖子。如果您知道这一点,那么您可能知道它有多酷,以及在一个帖子中有多大。提前谢谢

1 个答案:

答案 0 :(得分:0)

具有对数丢失的Softmax通常用于多类输出层激活功能。你有多类/多项:10个可能的数字包括10个类。

因此,您可以尝试将输出图层激活功能更改为softmax

http://en.wikipedia.org/wiki/Softmax_function

  

人工神经网络

     

在神经网络模拟中,   softmax功能通常在网络的最后一层实现   用于分类。然后在日志下训练这样的网络   损失(或交叉熵)制度,给出非线性变体   多项Logistic回归。

让我们知道它有什么影响。 -