ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习—人工神经网络

2022-07-01 13:01:36  阅读:195  来源: 互联网

标签:real 机器 res mid 人工神经网络 学习 delta np out


人工神经网络是由大量处理单元互联组成的非线性、自适应信息处理系统。它是在现代神经科学研究成果的基础上提出的,试图通过模拟大脑神经网络处理、记忆信息的方式进行信息处理

1.从输入层到隐藏层

import pandas as pd
import numpy as np

def sigmoid(x): #网络激活函数
    return 1/(1+np.exp(-x))

data_tr=pd.read_csv('BPdata_tr.txt')

#网络结构搭建
net_in=np.array([0.0499853495508432,0.334657078469172,-1]) # 网络输入
out_in=np.array([0,0,0,0,0,-1]) # 输出层的输入

w_mid=np.zeros([3,4]) #隐层神经元的权值&阈值
w_out=np.zeros([5]) #输出层神经元的权值&阈值

for i in range(4):
    out_in[i]=sigmoid(sum(net_in*w_mid[:,i]))

2.网络输出

import pandas as pd
import numpy as np

def sigmoid(x): #网络激活函数
    return 1/(1+np.exp(-x))

data_tr=pd.read_csv('BPdata_tr.txt')

#网络结构搭建
net_in=np.array([0.0499853495508432,0.334657078469172,-1]) # 网络输入
out_in=np.array([0,0,0,0,0,-1]) # 输出层的输入
real=0.114493895339242

w_mid=np.zeros([3,4]) #隐层神经元的权值&阈值
w_out=np.zeros([5]) #输出层神经元的权值&阈值



for i in range(4):
    out_in[i]=sigmoid(sum(net_in*w_mid[:,i]))

pre=sigmoid(sum(out_in*w_out))

3.单样本网络训练

import pandas as pd
import numpy as np

def sigmoid(x): #网络激活函数
    return 1/(1+np.exp(-x))

data_tr=pd.read_csv('BPdata_tr.txt')

yita=0.5
#网络结构搭建
net_in=np.array([0.0499853495508432,0.334657078469172,-1]) # 网络输入
out_in=np.array([0.0,0,0,0,-1]) # 输出层的输入
real=0.114493895339242

w_mid=np.zeros([3,4]) #隐层神经元的权值&阈值
w_out=np.zeros([5]) #输出层神经元的权值&阈值

delta_w_out=np.zeros([5]) #输出层权值&阈值的修正量
delta_w_mid=np.zeros([3,4]) #中间层权值&阈值的修正量

for it in range(100):
    for i in range(4):
        out_in[i]=sigmoid(sum(net_in*w_mid[:,i])) #从输入到隐层的传输过程

    res=sigmoid(sum(out_in*w_out)) #模型预测值
    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) #中间层神经元的阈值修正量
    w_mid=w_mid+delta_w_mid #更新

4.全样本网络训练

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('BPdata_tr.txt') #训练集样本

yita=0.5
#网络结构搭建
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(100): #控制训练轮数
    error=[]
    for it in range(500):
        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) #中间层神经元的阈值修正量
        w_mid=w_mid+delta_w_mid #更新
    err.append(np.mean(error))
plt.plot(err) #绘制误差变化线
plt.show()

5.网络性能评价

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('BPdata_tr.txt') #训练集样本
data_te=pd.read_csv('BPdata_te.txt') #测试集样本

yita=0.85
#网络结构搭建
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(1000): #控制训练轮数
    error=[]
    for it in range(500):
        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) #中间层神经元的阈值修正量
        w_mid=w_mid+delta_w_mid #更新
    err.append(np.mean(error))
plt.plot(err) #绘制误差变化线
plt.show()
plt.close()

#将测试集样本放入训练好的网络中去
error_te = []
for it in range(len(data_te)):
    net_in = np.array([data_te.iloc[it, 0], data_te.iloc[it, 1], -1])  # 网络输入
    real = data_te.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_te.append(abs(real - res))
plt.plot(error_te) #绘制误差变化线
plt.show()

6.使用sklearn实现神经网络

from sklearn.neural_network import MLPRegressor
import pandas as pd
import numpy as np

#调用sklearn实现神经网络算法
data_tr=pd.read_csv('BPdata_tr.txt') #训练集样本
data_te=pd.read_csv('BPdata_te.txt') #测试集样本

model=MLPRegressor(hidden_layer_sizes=(10,),random_state=10,max_iter=800,learning_rate_init=0.3) #构建模型
model.fit(data_tr.iloc[:,:2],data_tr.iloc[:,2]) #模型训练
pre=model.predict(data_te.iloc[:,:2]) #模型预测
err=np.abs(pre-data_te.iloc[:,2]).mean() #模型预测误差
print(err)

7.参考文章

人工神经网络

【创作不易,望点赞收藏,若有疑问,请留言,谢谢】

标签:real,机器,res,mid,人工神经网络,学习,delta,np,out
来源: https://www.cnblogs.com/dongxuelove/p/16434221.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有