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记录详细调用堆栈日志的方法
May 05 Python
详解python的ORM中Pony用法
Feb 09 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
python实现电脑自动关机
Jun 20 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
Django给admin添加Action的步骤详解
May 01 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 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
php的一个登录的类 [推荐]
2007/03/16 PHP
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
Javascript实现的分页函数
2006/12/22 Javascript
js资料prototype 属性
2007/03/13 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
详解Python3中的Sequence type的使用
2015/08/01 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
物业工作计划书
2014/01/10 职场文书
面试后感谢信
2014/02/01 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
讲党性心得体会
2014/09/03 职场文书
质量整改报告范文
2014/11/08 职场文书
《给予树》教学反思
2016/03/03 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书