神经网络(一) 感知机

    《计算智能》是北航开的一门研究生课程,主要内容为神经网络的原理和应用。该课程从圣经网络的原理开始,以感知机、简单神经网络为过渡,最后以深度学习结束。此博文为在学习该门课程的过程中,自己在完成课程作业的过程中的一些代码和心得。

作业一:感知机的基本原理与应用
题目:
设有两个模式样本集合
D1= {(2,1),(2,2),(3,2)}
D2= {(4,0),(5,0),(5,1)}
用感知机算法设计两个模式类的分类判决函数,并说明,当权值向量w取不同初值时,对训练效果的影响及原因。
感知机原理:
(1)单层感知机结构及更新公式:
感知机示意图
权值更新公式
当分类正确时,不更新权值。当分类错误时,用公式对权值进行更新。
(2)代码实现:

这里写代码片# -*- coding: utf-8 -*-
"""
Created on Tue Oct 18 21:29:09 2016
@author: Hansyang
"""
import numpy as np
import matplotlib.pyplot as plt
def perception(Data,Label,w,b,alpha):
    err=sum(abs(np.sign(Data*w+b)-Label))
    count=0
    while(err>0):
        count+=1
        for i in range(len(Data)):
            while(Label[i]*(Data[i]*w+b)<0):
                w=w+alpha*(Label[i]*Data[i]).transpose()
                b=b+alpha*Label[i]
        err=sum(abs(np.sign(Data*w+b)-Label))/2
        print('当前为训练的第%d次循环,分类错误的个数为:%d'%(count,int(err)))
return w,b

Data1=np.matrix([[2,1],[2,2],[3,2]]);
Data0=np.matrix([[4,0],[5,0],[5,1]]);
Data=np.concatenate((Data1,Data0),axis=0)
Label=np.matrix([1,1,1,-1,-1,-1]);
Label=Label.transpose();
w=np.matrix([[1000],[1]]);
b=0;
alpha=0.0001;

w,b=perception(Data,Label,w,b,alpha);

x=[i/100 for i in range(1,600)];
x=np.matrix(x);
y=-(w[0]*x+b)/w[1];
x=x.tolist()
y=y.tolist()
x=x[0]
y=y[0]
plt.plot(x,y,'r--',linewidth=2.0)
plt.plot(Data1[:,0],Data1[:,1],'b*')
plt.plot(Data0[:,0],Data0[:,1],'ro')
plt.ylim(-1, 3)
plt.xlim(1, 6)
plt.show() 
err=sum(abs(np.sign(Data*w+b)-Label))/2;
print('分类错误的个数为:%d'%err);

(3)结果分析:
选取不同的w,b:
这里写图片描述
初始值:w=[1,1],b=0,alpha=0.1
训练后:w=[-0.2,1],b=-0.3
训练循环次数:1
这里写图片描述
初始值:w=[1000,1],b=0,alpha=0.1
训练后:w=[-0.2,138.8],b=-138.1
训练循环次数:45
这里写图片描述
初始值:w=[1,1],b=0,alpha=0.0001
训练后:w=[-0.1377,0.963],b=-0.2746
训练循环次数:1
这里写图片描述
初始值:w=[1,1],b=0,alpha=1000
训练后:w=[-1999,3001],b=1000
训练循环次数:3
这里写图片描述
初始值:w=[1,1],b=0,alpha=0.0001
训练后:w=[-0.0001,138.25],b=-138.2539
训练循环次数:104
这里写图片描述
初始值:w=[1000,1],b=0,alpha=1000
训练后:w=[-1000,3001],b=1000
训练循环次数:3
结论: 无论w和alpha的初始取值为多少,最终都能得到正确的分类结果。但值得注意的是,当步长alpha过小时,且w的初始值设置得与最终值差距较大时,训练循环次数增多,训练时间明显变长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值