BP神经网络 python实现

原理部分

BP神经网络(算法整体思路及原理+手写公式推导)_秃头小苏的博客-CSDN博客_bp神经网络算法流程图

非常感谢这位博主

import time

import numpy as np
from BPNETpredata import traindata
from BPNETpredata import labledata
# BPNN

def sigmoid(x):
    return 1.0 / (1.0 + np.exp(-x))

def input(traindata):
    for i in traindata:
        return len(i)

def var(y1, y2, rate):  # y1:out y2:static out
    return -rate * (y2 - y1) * y1 * (1 - y1)

rate = 0.6
w1 = -1 + 2 * np.random.rand(9, 3)
w2 = -1 + 2 * np.random.rand(3, 1)
b1 = -1 + 2 * np.random.rand(1, 3)
b2 = -1 + 2 * np.random.rand(1, 1)
epoch = 9999999999999

# forward 3hidden 9input  1.1bias 1 out 3level
# INTALIZING
def bpnntrain(w1, w2, b1, b2, a, c, epoch, rate):
    for epoch in range(epoch):
        # step foward 1
        hidden = np.dot(a, w1)
        hidden = hidden - b1
        shidden = []

        for j in hidden:
            shidden.append(sigmoid(j))
        out = sigmoid(np.dot(shidden, w2)[0] - b2[0][0])

        # work out error
        loss = 0.5 * pow((c[0] - out[0]), 2)  # loss function
        accurate = (out[0] - c[0]) / c[0]

        if pow(pow(accurate, 2), 0.5) < 0.01:
            print(epoch, out[0], c[0], accurate)
            break

        # update b2
        varb2 = var(out[0], c[0], rate)
        b2[0][0] = b2[0][0] + varb2
        # update w2
        for i in range(len(shidden[0])):
            w2[i][0] = w2[i][0] - var(out[0], c[0], rate) * shidden[0][i]
        # update b1

        for i in range(len(shidden[0])):
            b1[0][i] = b1[0][i] + var(out[0], c[0], rate) * w2[i][0] * shidden[0][i] * (1 - shidden[0][i])

        # update w1
        for i in range(len(w1)):
            for j in range(len(shidden[0])):
                w1[i][j] = w1[i][j] + var(out[0], c[0], rate) * w2[j][0] * shidden[0][j] * (1 - shidden[0][j]) * a[i]
    return [w1, w2, b1, b2]
#train
for i in traindata:
    for j in labledata:
        a=i
        c=[j]
        qaq=bpnntrain(w1, w2, b1, b2, a, c, epoch, rate)
#predict
def bpnnpredict(w1,w2,b1,b2,a,c):
    hidden = np.dot(a, w1)
    hidden = hidden - b1
    shidden = []

    for j in hidden:
        shidden.append(sigmoid(j))
    out = sigmoid(np.dot(shidden, w2)[0] - b2[0][0])

    # work out error
    loss = 0.5 * pow((c[0] - out[0]), 2)  # loss function
    accurate = (out[0] - c[0]) / c[0]

    print(out[0],c[0],accurate)
list1=[0.123,0.124,0.125,0.124,0.1256,0.111,0.12312,0.1285,0.1231245]
list2=[1]

bpnnpredict(qaq[0],qaq[1],qaq[2],qaq[3],list1,list2)

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值