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列表(list)常用操作方法小结
Feb 02 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
VSCode下好用的Python插件及配置
Apr 06 Python
django 多数据库配置教程
May 30 Python
Python实现的txt文件去重功能示例
Jul 07 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
Aug 01 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 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
杏林同学录(九)
2006/10/09 PHP
php mysql数据库操作类
2008/06/04 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
python全栈开发语法总结
2020/11/22 Python
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
数字漫画:comiXology
2020/06/13 全球购物
员工工作表现评语
2014/04/26 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
小学教师见习总结
2015/06/23 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS