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

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函数作为激活函数,其公式为:

                                                                        

实现代码为:

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

'''
标准bp算法
每次更新都只针对单个样例,参数更新得很频繁s
dataSet 训练数据集
labels 训练数据集对应的标签
标签采用one-hot编码(一位有效编码),例如类别0对应标签为[1,0],类别1对应标签为[0,1]
alpha 学习率
num 隐层数,默认为1层
eachCount 每一层隐层的神经元数目
repeat 最大迭代次数
算法终止条件:达到最大迭代次数或者相邻一百次迭代的累计误差的差值不超过0.001
'''
def bp(dataSet, labels, alpha = 0.01, num = 1, eachCount = 10, repeat = 500):
    dataSet = mat(dataSet)
    m,n = shape(dataSet)
    if len(labels) == 0:
        print 'no train data! '
        return
    yCount = shape(labels[0])[1]     # 输出神经元的数目
    firstWMat = mat(random.sample((n + 1, eachCount)))   # 输入层到第一层隐层的w值和阈值,每列第一个为阈值
    hideWA
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值