【Python数学建模常用算法代码(二)之BP神经网络】_构建2层前馈神经网络的bp算法python手编代码

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

            self.wight_out[i][j] = random\_number(-0.2, 0.2)

    #最后建立动量因子(矩阵)
    self.ci = makematrix(self.num_in, self.num_hidden)
    self.co = makematrix(self.num_hidden, self.num_out)        
    
#信号正向传播
def update(self, inputs):
    if len(inputs) != self.num_in-1:
        raise ValueError('与输入层节点数不符')
        
    #数据输入输入层
    for i in range(self.num_in - 1):
        #self.active_in[i] = sigmoid(inputs[i])  #或者先在输入层进行数据处理
        self.active_in[i] = inputs[i]  #active_in[]是输入数据的矩阵
        
    #数据在隐藏层的处理
    for i in range(self.num_hidden - 1):
        sum = 0.0
        for j in range(self.num_in):
            sum = sum + self.active_in[i] \* self.wight_in[j][i]
        self.active_hidden[i] = sigmoid(sum)   #active_hidden[]是处理完输入数据之后存储,作为输出层的输入数据
        
    #数据在输出层的处理
    for i in range(self.num_out):
        sum = 0.0
        for j in range(self.num_hidden):
            sum = sum + self.active_hidden[j]\*self.wight_out[j][i]
        self.active_out[i] = sigmoid(sum)   #与上同理
        
    return self.active_out[:]

#误差反向传播
def errorbackpropagate(self, targets, lr, m):   #lr是学习率, m是动量因子
    if len(targets) != self.num_out:
        raise ValueError('与输出层节点数不符!')
        
    #首先计算输出层的误差
    out_deltas = [0.0]\*self.num_out
    for i in range(self.num_out):
        error = targets[i] - self.active_out[i]
        out_deltas[i] = derived\_sigmoid(self.active_out[i])\*error
    
    #然后计算隐藏层误差
    hidden_deltas = [0.0]\*self.num_hidden
    for i in range(self.num_hidden):
        error = 0.0
        for j in range(self.num_out):
            error = error + out_deltas[j]\* self.wight_out[i][j]
        hidden_deltas[i] = derived\_sigmoid(self.active_hidden[i])\*error
    
    #首先更新输出层权值
    for i in range(self.num_hidden):
        for j in range(self.num_out):
            change = out_deltas[j]\*self.active_hidden[i]
            self.wight_out[i][j] = self.wight_out[i][j] + lr\*change + m\*self.co[i][j]
            self.co[i][j] = change
            
    #然后更新输入层权值
    for i in range(self.num_in):
        for i in range(self.num_hidden):
            change = hidden_deltas[j]\*self.active_in[i]
            self.wight_in[i][j] = self.wight_in[i][j] + lr\*change + m\* self.ci[i][j]
            self.ci[i][j] = change
            
    #计算总误差
    error = 0.0
    for i in range(len(targets)):
        error = error + 0.5\*(targets[i] - self.active_out[i])\*\*2
    return error

#测试
def test(self, patterns):
    for i in patterns:
        print(i[0], '->', self.update(i[0]))
#权重
def weights(self):
    print("输入层权重")
    for i in range(self.num_in):
        print(self.wight_in[i])
    print("输出层权重")
    for i in range(self.num_hidden):
        print(self.wight_out[i])
        
def train(self, pattern, itera=100000, lr = 0.1, m=0.1):
    for i in range(itera):
        error = 0.0
        for j in pattern:
            inputs = j[0]
            targets = j[1]
            self.update(inputs)
            error = error + self.errorbackpropagate(targets, lr, m)
        if i % 100 == 0:
            print('误差 %-.5f' % error)

#实例
def demo():
patt = [
[[1,2,5],[0]],
[[1,3,4],[1]],
[[1,6,2],[1]],
[[1,5,1],[0]],
[[1,8,4],[1]]
]
#创建神经网络,3个输入节点,3个隐藏层节点,1个输出层节点
n = BPNN(3, 3, 1)
#训练神经网络
n.train(patt)
#测试神经网络
n.test(patt)
#查阅权重值
n.weights()

if name == ‘__main__’:

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值