python实现多层感知器


Posted in Python onJanuary 18, 2019

写了个多层感知器,用bp梯度下降更新,拟合正弦曲线,效果凑合。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
 
 
def sigmod(z):
 return 1.0 / (1.0 + np.exp(-z))
 
 
class mlp(object):
 def __init__(self, lr=0.1, lda=0.0, te=1e-5, epoch=100, size=None):
  self.learningRate = lr
  self.lambda_ = lda
  self.thresholdError = te
  self.maxEpoch = epoch
  self.size = size
  self.W = []
  self.b = []
  self.init()
 
 def init(self):
  for i in xrange(len(self.size)-1):
   self.W.append(np.mat(np.random.uniform(-0.5, 0.5, size=(self.size[i+1], self.size[i]))))
   self.b.append(np.mat(np.random.uniform(-0.5, 0.5, size=(self.size[i+1], 1))))
 
 def forwardPropagation(self, item=None):
  a = [item]
  for wIndex in xrange(len(self.W)):
   a.append(sigmod(self.W[wIndex]*a[-1]+self.b[wIndex]))
  """
  print "-----------------------------------------"
  for i in a:
   print i.shape,
  print
  for i in self.W:
   print i.shape,
  print
  for i in self.b:
   print i.shape,
  print
  print "-----------------------------------------"
  """
  return a
 
 def backPropagation(self, label=None, a=None):
  # print "backPropagation--------------------begin"
  delta = [(a[-1]-label)*a[-1]*(1.0-a[-1])]
  for i in xrange(len(self.W)-1):
   abc = np.multiply(a[-2-i], 1-a[-2-i])
   cba = np.multiply(self.W[-1-i].T*delta[-1], abc)
   delta.append(cba)
  """
  print "++++++++++++++delta++++++++++++++++++++"
  print "len(delta):", len(delta)
  for ii in delta:
   print ii.shape,
  print "\n======================================="
  """
  for j in xrange(len(delta)):
   ads = delta[j]*a[-2-j].T
   # print self.W[-1-j].shape, ads.shape, self.b[-1-j].shape, delta[j].shape
   self.W[-1-j] = self.W[-1-j]-self.learningRate*(ads+self.lambda_*self.W[-1-j])
   self.b[-1-j] = self.b[-1-j]-self.learningRate*delta[j]
   """print "=======================================1234"
   for ij in self.b:
    print ij.shape,
   print
   """
  # print "backPropagation--------------------finish"
  error = 0.5*(a[-1]-label)**2
  return error
 
 def train(self, input_=None, target=None, show=10):
  for ep in xrange(self.maxEpoch):
   error = []
   for itemIndex in xrange(input_.shape[1]):
    a = self.forwardPropagation(input_[:, itemIndex])
    e = self.backPropagation(target[:, itemIndex], a)
    error.append(e[0, 0])
   tt = sum(error)/len(error)
   if tt < self.thresholdError:
    print "Finish {0}: ".format(ep), tt
    return
   elif ep % show == 0:
    print "epoch {0}: ".format(ep), tt
 
 def sim(self, inp=None):
  return self.forwardPropagation(item=inp)[-1]
 
 
if __name__ == "__main__":
 tt = np.arange(0, 6.28, 0.01)
 labels = np.zeros_like(tt)
 print tt.shape
 """
 for po in xrange(tt.shape[0]):
  if tt[po] < 4:
   labels[po] = 0.0
  elif 8 > tt[po] >= 4:
   labels[po] = 0.25
  elif 12 > tt[po] >= 8:
   labels[po] = 0.5
  elif 16 > tt[po] >= 12:
   labels[po] = 0.75
  else:
   labels[po] = 1.0
 """
 tt = np.mat(tt)
 labels = np.sin(tt)*0.5+0.5
 labels = np.mat(labels)
 model = mlp(lr=0.2, lda=0.0, te=1e-5, epoch=500, size=[1, 6, 6, 6, 1])
 print tt.shape, labels.shape
 print len(model.W), len(model.b)
 print
 model.train(input_=tt, target=labels, show=10)
 sims = [model.sim(tt[:, idx])[0, 0] for idx in xrange(tt.shape[1])]
 
 xx = tt.tolist()[0]
 plt.figure()
 plt.plot(xx, labels.tolist()[0], xx, sims, 'r')
 plt.show()

效果图:

python实现多层感知器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中itertools模块用法详解
Sep 25 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
Python实现截屏的函数
Jul 25 Python
Python提取网页中超链接的方法
Sep 18 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
Linux下python3.7.0安装教程
Jul 30 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 #Python
基于python实现KNN分类算法
Apr 23 #Python
python实现定时发送qq消息
Jan 18 #Python
如何在Django中设置定时任务的方法示例
Jan 18 #Python
Python设计模式之工厂方法模式实例详解
Jan 18 #Python
Python设计模式之原型模式实例详解
Jan 18 #Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 #Python
You might like
德生BCL3000的电路分析和打磨
2021/03/02 无线电
php获取地址栏信息的代码
2008/10/08 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
python import 上级目录的导入
2020/11/03 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
二手书店创业计划书
2014/01/16 职场文书
小学语文教学反思
2014/02/10 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
员工工作表现评语
2014/04/26 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
《社戏》教学反思
2016/02/22 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书