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抓取网页中图片并保存到本地
Dec 01 Python
python黑魔法之参数传递
Feb 12 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
Python常用库推荐
Dec 04 Python
Python实现DDos攻击实例详解
Feb 02 Python
python批量处理txt文件的实例代码
Jan 13 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
python使用布隆过滤器的实现示例
Aug 20 Python
如何利用Python写个坦克大战
Nov 18 Python
Python类型转换的魔术方法详解
Dec 23 Python
Python 内置函数速查表一览
Jun 02 Python
如何使用pdb进行Python调试
Jun 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
实用函数2
2007/11/08 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
php短信接口代码
2016/05/13 PHP
php实用代码片段整理
2016/11/12 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
PHP面试题附答案
2015/11/28 面试题
《鸿门宴》教学反思
2014/04/22 职场文书
大学新闻系求职信
2014/06/03 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
干部作风建设工作总结
2014/10/29 职场文书
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS