神经网络

2022/3/19 23:59:53

本文主要是介绍神经网络,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

print("姓名:吴文蕊,学号:2020310143127")
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):   
    return 1/(1+np.exp(-x))
data_tr = pd.read_csv('D:\jupyter notebook\3.3 data_tr.txt')  # 训练集样本
data_te = pd.read_csv('D:\jupyter notebook\3.3 data_te.txt')  # 测试集样本
n = len(data_tr)
yita = 0.1  
out_in = np.array([0.0, 0, 0, 0, -1])   # 输出层的输入,即隐层的输出
w_mid = np.zeros([3,4])  # 隐层神经元的权值&阈值
w_out = np.zeros([5])     # 输出层神经元的权值&阈值
delta_w_out = np.zeros([5])      # 输出层权值&阈值的修正量
delta_w_mid = np.zeros([3,4])   # 中间层权值&阈值的修正量
Err = []

for j in range(800):
    error = []
    for it in range(n):
        net_in = np.array([data_tr.iloc[it, 0], data_tr.iloc[it, 1], -1])  # 网络输入
        real = data_tr.iloc[it, 2]
        for i in range(4):
            out_in[i] = sigmoid(sum(net_in * w_mid[:, i]))  # 从输入到隐层的传输过程
        res = sigmoid(sum(out_in * w_out))   # 模型预测值
        error.append(abs(real-res))#误差

        print('第',it, '个样本的模型输出:', res, 'real:', real)
        delta_w_out = yita*res*(1-res)*(real-res)*out_in  # 输出层权值的修正量
        delta_w_out[4] = -yita*res*(1-res)*(real-res)     # 输出层阈值的修正量
        w_out = w_out + delta_w_out   # 更新,加上修正量

        for i in range(4):
            delta_w_mid[:, i] = yita*out_in[i]*(1-out_in[i])*w_out[i]*res*(1-res)*(real-res)*net_in   # 中间层神经元的权值修正量
            delta_w_mid[2, i] = -yita*out_in[i]*(1-out_in[i])*w_out[i]*res*(1-res)*(real-res)         # 中间层神经元的阈值修正量,第2行是阈值
        w_mid = w_mid + delta_w_mid   # 更新,加上修正量
    Err.append(np.mean(error))
print(w_mid,w_out)
plt.plot(Err)#训练集上每一轮的平均误差
plt.show()
plt.close()

for it in range(len(data_te)):
    net_in = np.array([data_te.iloc[it, 0], data_te.iloc[it, 1], -1])  # 网络输入
    for i in range(4):
        out_in[i] = sigmoid(sum(net_in * w_mid[:, i]))  # 从输入到隐层的传输过程
    res = sigmoid(sum(out_in * w_out))   # 模型预测值
    print('第',it+1,'个测试值:',res)

 

 

 



这篇关于神经网络的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程