Python : bp神经网络

本文介绍了Python中BP神经网络的结构和训练过程,包括输入层、隐藏层和输出层的设置。通过示例代码展示了如何使用训练数据进行预测,并对源代码进行了调整以适应不同数据集。在训练癌症数据集上,通过调整网络结构,如增加隐藏层,观察到错误率随训练次数降低,分类效果改善。
摘要由CSDN通过智能技术生成

经典的BP神经网络通常由三层组成: 输入层, 隐含层与输出层.通常输入层神经元的个数与特征数相关,输出层的个数与类别数相同, 隐含层的层数与神经元数均可以自定义.

参考这篇文章BP神经网络:http://www.cnblogs.com/Finley/p/5946000.html

我们用一个完成训练的神经网络处理回归问题, 每个样本拥有n个输入.相应地,神经网络拥有n个输入神经元和1个输出神经元.
实际应用中我们通常在输入层额外增加一个偏置神经元, 提供一个可控的输入修正;或者为每个隐含层神经元设置一个偏置参数.我们将n个特征依次送入输入神经元, 隐含层神经元获得输入层的输出并计算自己输出值, 输出层的神经元根据隐含层输出计算出回归值.上述过程一般称为前馈(Feed-Forward)过程, 该过程中神经网络的输入输出与多维函数无异.
现在我们的问题是如何训练这个神经网络.作为监督学习算法,BP神经网络的训练过程即是根据前馈得到的预测值和参考值比较, 根据误差调整连接权重WijWij的过程.训练过程称为反向传播过程(BackPropagation), 数据流正好与前馈过程相反.

代码部分:              

def test(self):

cases = [  [0, 0],
             [0, 1],
            [1, 0],
            [1, 1], ]

labels = [[0], [1], [1], [0]] #训练数据与对应标签

self.setup(2, 5, 1)setup(self, ni, nh, no)  输入层2 ,隐含层5 与输出层 1

self.train(cases, labels, 10000, 0.05, 0.1)  # train(self, cases, labels, limit=10000, learn=0.05, correct=0.1):  训练10000次

         for case in cases:用训练好的神经网络进行预测

 print(self.predict(case)


对源代码进行修改,以适应不同的数据的训练

def test(self):#653行数据:400行作训练组,153行作测试组
        dataset = np.loadtxt('cancer.csv', delimiter=",")#训练数据与对应标签
        cases = dataset[:,1:10]#训练数据
        labels = dataset[:,10]#训练数据对应标签
        self.setup(8, 20, 1)输入层8,隐含层12 与输出层 1
        self.train(cases[:400], labels, 4000, 0.05, 0.1)训练4000次
        count = [0,0]记录测试组,分类的正确与失败的次数
        i=0
        for case in cases[400:]:
            if abs(self.predict(case)[0]-labels[400+i])<0.1:
                count[0]=count[0]+1
            else: 
                count[1]=count[1]+1
            i=i+1
        print 'result =',count
        print 'error =',float(count[1])/(count[0]+count[1])计算错误率

cancer.csv数据表如下(部分):

患者编号 指标1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值