• 机器学习—人工神经网络


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

    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.参考文章

    人工神经网络

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

  • 相关阅读:
    Windows 10 +Anaconda+tensorflow+cuda8.0 环境配置
    mysql练习
    Flask 系列之 LoginManager
    flask_restful的使用
    用 Flask 来写个轻博客 (27) — 使用 Flask-Cache 实现网页缓存加速
    jquery之$(document).ready(function()和 $(function()执行顺序
    Spring Bean的生命周期(非常详细)
    Asset Catalog Help (一)---About Asset Catalogs
    Programming With Objective-C---- Encapsulating Data ---- Objective-C 学习(三) 封装数据
    Ruby module ---模块,组件
  • 原文地址:https://www.cnblogs.com/dongxuelove/p/16434221.html
Copyright © 2020-2023  润新知