• 大小: 10KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: python  BP  

资源简介

BPNet算法是一种最有效的多层神经网络学习方法算法实现分类。包括已实现的代码和训练、测试的数据集。

资源截图

代码片段和文件信息

#-*-coding:utf-8-*-
from numpy import *


class BPNet(object):
    def __init__(self):
        self.eb=0.01
        self.iterator=0
        self.eta=0.1
        self.mc=0.3
        self.maxiter=2000
        self.nHidden=4;
        self.nOut=1;
        self.errlist=[]
        self.dataMat=0
        self.classLabes=0
        self.nSampNu=0
        self.nSampDim=0
       # self.hi_wb=self.hi_wb+(1.0-self.mc)*self.eta*dhi_wb+self.mc*dhi_wbOld
    #激活函数
    def logistic(selfnet):
        return 1.0/(1.0+exp(-net))
    #q全局误差函数
    def errorfunc(selfinX):
        return sum(power(inX2))*0.5
    #传递函数导函数
    def dlogit(selfnet):
        return multiply(net(1.0-net))

    def init__hiddenWB(self):#隐含层初始化
        self.hi_w=2.0*(random.rand(self.nHiddenself.nSampDim)-0.5)
        self.hi_b = 2.0 * (random.rand(self.nHidden 1) - 0.5)
        self.hi_wb = mat(self.addcol(mat(self.hi_w)mat(self.hi_b)))

    def init_OutputWB(self):#输出层初始化
        self.out_w=2.0*(random.rand(self.nOutself.nHidden)-0.5)
        self.out_b = 2.0 * (random.rand(self.nOut 1) - 0.5)
        self.out_wb = mat(self.addcol(mat(self.out_w)mat(self.out_b)))

    #加载数据集
    def loadDataSet(selffilename):
        self.dataMat=[];self.classLabes=[]
        fr=open(filename)
        for line in fr.readlines():
            lineArr=line.strip().split()
            self.dataMat.append([float(lineArr[0])float(lineArr[1])1.0])
            self.classLabes.append(float(lineArr[2]))
        self.dataMat=mat(self.dataMat)
        mn=shape(self.dataMat)
        self.nSampNum=m;#样本数量
        self.nSampDim=n-1#样本维度
    #数据集归一化
    def normalize(selfdataMat):
        [mn]=shape(dataMat)
        for i in xrange(n-1):
            dataMat[:i]=(dataMat[:i]-mean(dataMat[:i]))/(std(dataMat[:i])+1.0e-10)
        return dataMat
    #矩阵新增新列
    def addcol(selfmatrix1matrix2):
        [m1n1]=shape(matrix1)
        [m2n2]=shape(matrix2)
        if m1!=m2:
            print “different rowscan not merge matrix“
            return ;
        mergMat=zeros((m1n1+n2))
        mergMat[:0:n1]=matrix1[:0:n1]
        mergMat[:n1:(n1+n2)]=matrix2[:0:n2]
        return mergMat
    #绘制分类点
    def drawClassScatter(selfplt):
        i=0
        for mydata in self.dataMat:
            if self.classLabes[i]==1:
                plt.scatter(mydata[00]mydata[01]c=‘blue‘marker=‘o‘)
            else:
                plt.scatter(mydata[00] mydata[01] c=‘red‘ marker=‘s‘)
            i+=1
    #主函数----------
    def bpTrain(self):
        SampIn=self.dataMat.T
        expected=mat(self.classLabes)
        self.init__hiddenWB();self.init_OutputWB()
        dout_wbOld=0.0;dhi_wbOld=0.0
        #主循环
        for i in xrange(self.maxiter):
            #正向传播,从输入层到隐藏层
            hi_input=self.hi_wb*SampIn
            hi_output=self.logistic(hi_input)
            hi2out=self.addcol(hi_output.Tones((self.nSampNum1))).

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        448  2018-04-24 21:57  BPNet\.idea\BPNet.iml

     文件        213  2018-04-23 20:19  BPNet\.idea\misc.xml

     文件        466  2018-04-24 21:57  BPNet\.idea\modules.xml

     文件      22641  2018-04-25 20:45  BPNet\.idea\workspace.xml

     文件       5224  2018-04-25 19:54  BPNet\BPNet.py

     文件       6138  2018-04-25 19:54  BPNet\BPNet.pyc

     文件        577  2018-04-25 20:16  BPNet\BPTest.py

     文件       2251  2018-04-24 21:37  BPNet\data.txt

     目录          0  2018-04-27 18:57  BPNet\.idea

     目录          0  2018-04-27 18:57  BPNet

----------- ---------  ---------- -----  ----

                37958                    10


评论

共有 条评论