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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
Python中文编码那些事
Jun 25 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
浅析Python中的join()方法的使用
May 19 Python
Python中title()方法的使用简介
May 20 Python
Django异步任务之Celery的基本使用
Mar 23 Python
python求最大值最小值方法总结
Jun 25 Python
解决Django中多条件查询的问题
Jul 18 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python单例设计模式实现解析
Jan 07 Python
Python self用法详解
Nov 28 Python
python 写一个文件分发小程序
Dec 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
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
各种快递查询--Api接口
2016/04/26 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
Python目录和文件处理总结详解
2019/09/02 Python
opencv python图像梯度实例详解
2020/02/04 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
作风整顿剖析材料
2014/09/30 职场文书
店长岗位职责
2015/02/11 职场文书
爱国主义主题班会
2015/08/14 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python