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 基础学习教程
Feb 08 Python
Python交换变量
Sep 06 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python只用40行代码编写的计算器实例
May 10 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
python3 pygame实现接小球游戏
May 14 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
python3中的eval和exec的区别与联系
Oct 10 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
django1.11.1 models 数据库同步方法
2018/05/30 Python
python实现远程控制电脑
2019/05/23 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Django CBV类的用法详解
2019/07/26 Python
Python线程指南分享
2019/11/19 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
建材业务员岗位职责
2013/12/08 职场文书
英文演讲稿
2014/05/15 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
车间核算员岗位职责
2014/07/01 职场文书
群众路线领导对照材料
2014/08/23 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书