当前位置:   article > 正文

根据《机器学习》(周志华)第五章内容,用Python实现标准BP算法_周志华 机器学习bp算法python实现

周志华 机器学习bp算法python实现

BP神经网络由一层输入层、任意隐层(一般为1)、一层输出层组成。假定输入向量为n维向量,即输入神经元数量为n,隐层的层数为num,每一层隐层的神经元数量为eachCount,输出向量为yCount维向量,即输出神经元的数量为yCount,则BP算法要训练的参数有:

1.输入层到第一层隐层的n * eachCount个连接权值以及eachCount个阈值;

2.隐层与隐层之间的(num - 1) * eachCount * eachCount个连接权值以及(num -1) * eachCount个阈值;

3.最后一层隐层到输出层的eachCount * yCount个连接权值以及输出层的yCount个阈值。

其中,阈值可看作一个固定输入为-1.0的“哑结点”,因此权重和阈值的学习可以统一为权重的学习。

BP算法包括标注BP算法以及累积BP算法,前者每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。而累积BP算法直接针对累积误差最小化,它正在读取整个训练集D一遍后才对参数进行更新,其参数更新的频率低得多。这里我们使用Python来实现标准BP算法。

神经元使用Sigmoid函数作为激活函数,其公式为:

                                                                        

实现代码为:

  1. def sigmoid(inX):
  2. return 1.0/(1+exp(-inX))
然后给出标准BP算法的Python实现,引用了numpy库进行矩阵计算,python版本为2.7,注释很详细:

  1. '''
  2. 标准bp算法
  3. 每次更新都只针对单个样例,参数更新得很频繁s
  4. dataSet 训练数据集
  5. labels 训练数据集对应的标签
  6. 标签采用one-hot编码(一位有效编码),例如类别0对应标签为[1,0],类别1对应标签为[0,1]
  7. alpha 学习率
  8. num 隐层数,默认为1层
  9. eachCount 每一层隐层的神经元数目
  10. repeat 最大迭代次数
  11. 算法终止条件:达到最大迭代次数或者相邻一百次迭代的累计误差的差值不超过0.001
  12. '''
  13. def bp(dataSet, labels, alpha = 0.01, num = 1, eachCount = 10, repeat = 500):
  14. dataSet = mat(dataSet)
  15. m,n = shape(dataSet)
  16. if len(labels) == 0:
  17. print 'no train data! '
  18. return
  19. yCount = shape(labels[0])[1] # 输出神经元的数目
  20. firstWMat = mat(random.sample((n + 1, eachCount))) # 输入层到第一层隐层的w值和阈值,每列第一个为阈值
  21. hideWA
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/358974
推荐阅读
相关标签
  

闽ICP备14008679号