bp算法python代码_BP算法推导python实现

'''

标准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值和阈值,每列第一个为阈值

hideWArr = random.sample((num - 1, eachCount + 1, eachCount)) # 隐藏间的w值和阈值,每列第一个为阈值

lastWMat = mat(random.sample((eachCount + 1, yCount))) # 最后一个隐层到输出神经元的w值和阈值,每列第一个为阈值

hideInputs = mat(zeros((num, eachCount))) # 隐层的输入

hideOutputs = mat(zeros((num, eachCount + 1))) # 隐层的输出

hideOutputs[:, 0] = -1.0 # 初始化隐层输出的每列第一个值为-1,即下一层功能神经元的阈值对应的输入恒为-1

hideEh = mat(zeros((num, eachCount))) # 隐层的梯度项

yInputs = mat(zeros((1, yCount))) # 输出层的输入

i = 0 # 迭代次数

old_ey = 0 # 前一次迭代的累积误差

sn = 0 # 相邻迭代的累计误差的差值不超过0.001的次数

while i < repeat:

for r in range(len(dataSet)):

line = dataSet[r]

# 根据输入样本计算隐层的输入和输出

xMat = mat(insert(line, 0, values=-1.0, axis=1))

hideInputs[0, :] = xMat * firstWMat

hideOutputs[0, 1:] = sigmoid(hideInputs[0, :])

for j in range(1, len(hideInputs)):

hideInputs[j, :] = hideOutputs[j -

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值