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基础教程之循环介绍
Aug 29 Python
Python与shell的3种交互方式介绍
Apr 11 Python
python之Socket网络编程详解
Sep 29 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
使用python 3实现发送邮件功能
Jun 15 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
python的pstuil模块使用方法总结
Jul 26 Python
详解pytorch创建tensor函数
Mar 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
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
Python中format()格式输出全解
2019/04/12 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
联想英国官网:Lenovo英国
2019/07/17 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
最新远光软件笔试题面试题内容
2013/11/08 面试题
公司董事长职责
2013/12/12 职场文书
商场中秋节广播稿
2014/01/17 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
《去年的树》教学反思
2014/04/11 职场文书
师德师风自我评价范文
2014/09/11 职场文书
创先争优个人总结
2015/03/04 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书