BP神经网络

 

 

 

 

题目如上,求预测值

1.引用

2.激活函数

 

 

3.读取数据

 

 

4.将调用的数据转为数组

Err = []

5.中间层神经元输入和输出层神经元输入

 

 6.中间层和输出层神经元权值

7.设置训练

8.结果显示

 

代码如下:

 

import math
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import DataFrame,Series
#激活函数:
def sigmoid(x):
return 1/(1+math.exp(-x))
#读取数据
data_tr=pd.read_csv('E:\人工智能\作业\datatr.txt')
data_te=pd.read_csv('E:\人工智能\作业\datate.txt')
#设置学习率
yita=1.75
#设置结构
Err = []
#中间层神经元输入和输出层神经元输入
Net_in=DataFrame(0.6,index=['input1','input2','theata'],columns=['a'])
Out_in=DataFrame(0,index=['input1','input2','input3','input4','theata'],columns=['a'])
Net_in.iloc[2,0]=-1
Out_in.iloc[4,0]=-1
#中间层和输出层神经元权值
W_mid=DataFrame(0.5,index=['input1','input2','theata'],columns=['mid1','mid2','mid3','mid4'])
W_out=DataFrame(0.5,index=['input1','input2','input3','input4','theata'],columns=['a'])
W_mid_delta=DataFrame(0,index=['input1','input2','theata'],columns=['mid1','mid2','mid3','mid4'])
W_out_delta=DataFrame(0,index=['input1','input2','input3','input4','theata'],columns=['a'])
#设置训练
n=len(data_tr)
for j in range(500):
error = []
for i in range(n):
Net_in.iloc[0,0]=data_tr.iloc[i,0]
Net_in.iloc[1,0]=data_tr.iloc[i,1]
real=data_tr.iloc[i,2]
#中间层的输出
for t in range(0,4):
Out_in.iloc[t,0]=sigmoid(sum(W_mid.iloc[:,t]*Net_in.iloc[:,0]))
#输出层的输出/网络输出
res=sigmoid(sum(Out_in.iloc[:,0]*W_out.iloc[:,0]))
error.append(abs(res-real))
#输出层权值变化量
W_out_delta.iloc[:,0]=yita*res*(1-res)*(real-res)*Out_in.iloc[:,0]
W_out_delta.iloc[4,0]=-(yita*res*(1-res)*(real-res))
W_out=W_out+W_out_delta#输出层权值更新
#中间层权值变化量
for t in range(0,4):
W_mid_delta.iloc[:,g]=yita*Out_in.iloc[g,0]*(1-Out_in.iloc[g,0])*W_out.iloc[g,0]*res*(1-res)*(real-res)*Net_in.iloc[:,0]
W_mid_delta.iloc[2,g]=-(yita*Out_in.iloc[g,0]*(1-Out_in.iloc[g,0])*W_out.iloc[g,0]*res*(1-res)*(real-res))
#中间层权值更新
W_mid=W_mid+W_mid_delta
Err.append(np.mean(error))
print(W_mid,W_out)
plt.plot(Err)#训练集上每一轮的平均误差
plt.show()
plt.close()

posted on 2022-03-19 11:07  以晴  阅读(77)  评论(0)    收藏  举报