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中关于使用模块的基础知识
May 24 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
Nov 05 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
Python并行分布式框架Celery详解
Oct 15 Python
python检测IP地址变化并触发事件
Dec 26 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python使用matplotlib绘制雷达图
Oct 18 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python正则表达式急速入门(小结)
Dec 16 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 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检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
JS正则表达式验证中文字符
2017/05/08 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
使用Python操作MySQL的一些基本方法
2015/08/16 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
Python列表与元组的异同详解
2019/07/02 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
python opencv进行图像拼接
2020/03/27 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
python中常用的数据结构介绍
2021/01/12 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
2014三八妇女节活动总结
2014/03/01 职场文书
2014最新实习证明模板
2014/10/02 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python