BP神经网络的模型(超级简陋)

BP神经网络的小模型

import numpy as np
import pandas as pd
import random
def sig(x):
    return x/(1+np.abs(x))
def dsig(x):
    return 1/(np.abs(x)+1)**2
def rsig(x):
    return x/(1-x)
W=[0,-1.0,1.0]
def GetRan(n,m):
    return ((6**0.5)/((n+m)**0.5))*W[random.randint(1,2)]

#---------------------处理数据
#预处理到可以直接用的程度
A=pd.read_csv("DataProductionSum.csv")
A=A.values
sum_RES=A[:,6]
sum_X=A[:,:6]
sum_X=sum_X[:,2:]
sum_RES=sum_RES.astype('float64')
sum_X=sum_X.astype('float64')
sum_RES=sum_RES[:,np.newaxis]
#下面开始拆分数据
numTrain=15
X=sum_X[:numTrain,:]
Y=sum_RES[:numTrain,:]
Y=sig(Y.T)

X_test=sum_X[numTrain+1:,:]
Y_test=sum_RES[numTrain+1:,:]
Y_test=sig(Y_test.T)
#---------------------处理数据

midNum=[10,10]#隐藏层神经元个数
sz=len(midNum)#网络隐藏层层数
xNum=X.shape[1]#第一层(输入层神经元个数)
yNum=Y.shape[0]#最终层(输出层)的神经元数量
V=[]

t=np.random.random((xNum,midNum[0]))*GetRan(xNum,midNum[0])
V.append(t)
for i in range(1,sz):
    t=np.random.random((midNum[i-1],midNum[i]))*GetRan(midNum[i-1],midNum[i])
    V.append(t)
t=np.random.random((midNum[sz-1],yNum))*GetRan(midNum[sz-1],yNum)
V.append(t)

lr=0.0001

def updata():
    global X,Y,V,lr,P,sz
    L=[]
    t=sig(np.dot(X,V[0]))
    L.append(t)
    for i in range(1,sz):
        t=sig((np.dot(L[i-1],V[i])))
        L.append(t)
    t=sig((np.dot(L[sz-1], V[sz])))
    L.append(t)

    st=[]
    L_delta=[]
    top=0
    t=(Y.T-L[sz])*dsig(L[sz])
    st.append(t)
    for i in range(sz-1,-1,-1):
        t=t.dot(V[i+1].T)*dsig(L[i])
        st.append(t)
    top=len(st)
    while top>0:
        top=top-1
        L_delta.append(st[top])
    #

    V_C=[]
    t=lr*X.T.dot(L_delta[0])
    V_C.append(t)
    for i in range(1,sz+1):
        t=lr*L[i-1].T.dot(L_delta[i])
        V_C.append(t)

    for i in range(0,sz+1):
        V[i]=V[i]+V_C[i]

#-------------训练之前:
L=[]
t=sig(np.dot(X_test,V[0]))
L.append(t)
for i in range(1,sz):
    t=sig((np.dot(L[i-1],V[i])))
    L.append(t)
t=sig((np.dot(L[sz-1], V[sz])))
L.append(t)
#print("Pre",rsig(Y_test.T))
print("Error of Pre:",np.mean(np.abs(Y_test-L[sz])))
#-------------开始训练

for i in range(20000):
    updata()
#--------------训练集数据
L=[]
t=sig(np.dot(X,V[0]))
L.append(t)
for i in range(1,sz):
    t=sig((np.dot(L[i-1],V[i])))
    L.append(t)
t=sig((np.dot(L[sz-1], V[sz])))
L.append(t)
print("Error of Train:",np.mean(np.abs(Y-L[sz])))
#--------------测试集数据
L=[]
t=sig(np.dot(X_test,V[0]))
L.append(t)
for i in range(1,sz):
    t=sig((np.dot(L[i-1],V[i])))
    L.append(t)
t=sig((np.dot(L[sz-1], V[sz])))
L.append(t)

print("Error of Test:",np.mean(np.abs(Y_test-L[sz])))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值